Я работаю с существующим проектом Visual Studio 2010, и теперь мне нужно добавить новые функции (библиотека Eigen и Point Cloud) в существующий метод (назовем его foo()
). Я теперь, когда проект каким-то образом использует C ++ / CLI. Должен признаться, я понятия не имею о C ++ / CLI, просто прочитайте немного об этом. Однако класс, в котором объявлен и определен foo()
, кажется обычным классом C ++, без ref
или любого другого идентификатора CLI. Но внутри foo()
используются ручки (var^
). Так что я не совсем уверен, является ли foo()
управляемой функцией !? Я могу добавить в эту функцию довольно много обычного кода C ++, но теперь я начал с Eigen и PCL и обнаружил некоторые загадочные ошибки. Например, когда я это объявляю:
Eigen::Matrix3f m;
Все работает нормально. Но когда я это делаю:
Eigen::Matrix4f m;
Я получаю следующие ошибки:
error C2711: 'fooclass::foo' : this functon cannot be compiled as managed, consider using #pragma unmanaged
error C3821: 'void fooclass::foo(void)': managed type or function cannot be used in an unmanaged function
Так что он работает с 3f, но не с 4f! Это так странно, и это всего лишь один пример. Я не могу распознать какой-либо узор. Насколько я понимаю, VS каким-то образом считает, что Matrix4f
является управляемой функцией.
Буду признателен за любые чаевые! Я даже не знаю, с чего начать.
1 ответ
Я ничего не знаю о CLI, но единственное существенное различие между Matrix3f и Matrix4f состоит в том, что второй вектор векторизован и внутренне его данные запрашиваются для согласования с __declspec(align(16))
.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .