这是我的代码。
Matrix<int, 240, 240>* imagePixels;
for (signed int x = 0; x < 100; ++x)
{
for (signed int y = 0; y < 100; ++y)
{
imagePixels(x,y) = y;
}
}
我想简单地为我的矩阵添加值,但它给了我:
expression preceding parentheses of apparent call must have (pointer-to-) function type
matrix(x,y) = y;
我正在使用C ++ CLI。
答案 0 :(得分:1)
我从未使用过Eigen,但我认为它抱怨imagePixels
的类型。
Matrix<int, 240, 240>* imagePixels;
(我假设您没有使用任何内容初始化imagePixels,这是Web上的复制粘贴错误,而不是实际代码中的错误。)
使用()
语法访问特征矩阵对象的所有示例都使用类值类型,而不是指针。在没有*
的情况下试一试,看看是否能为您解决问题。
Matrix<int, 240, 240> imagePixels;
// ^-- No "*"
好的,所以imagePixels
是您托管类的成员。托管类只允许包含其他托管类,托管句柄(^
),非托管指针(*
)或基本类型(例如,int)。不允许将非托管类作为值类型。
有两种解决方法:
将imagePixels
保留为指针,并在每次使用()
语法时取消引用它。
(*imagePixels)(x,y) = y;
声明一个非托管结构,将矩阵保存为值,并在类中指向该矩阵。
struct HolderOfUnmanagedThings { Matrix<int, 240, 240> imagePixels; };
// In your managed class
HolderOfUnmanagedThings* unmanaged = new HolderOfUnmanagedThings();
unmanaged->imagePixels(x,y) = y;