C ++ CLI Eigen:在Matrix中设置值

时间:2016-02-25 20:31:16

标签: matrix c++-cli eigen

这是我的代码。

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。

1 个答案:

答案 0 :(得分:1)

我从未使用过Eigen,但我认为它抱怨imagePixels的类型。

Matrix<int, 240, 240>* imagePixels;

(我假设您没有使用任何内容初始化imagePixels,这是Web上的复制粘贴错误,而不是实际代码中的错误。)

使用()语法访问特征矩阵对象的所有示例都使用类值类型,而不是指针。在没有*的情况下试一试,看看是否能为您解决问题。

Matrix<int, 240, 240> imagePixels;
//                   ^-- No "*"

修改

好的,所以imagePixels是您托管类的成员。托管类只允许包含其他托管类,托管句柄(^),非托管指针(*)或基本类型(例如,int)。不允许将非托管类作为值类型。

有两种解决方法:

  1. imagePixels保留为指针,并在每次使用()语法时取消引用它。

    (*imagePixels)(x,y) = y;
    
  2. 声明一个非托管结构,将矩阵保存为值,并在类中指向该矩阵。

    struct HolderOfUnmanagedThings { Matrix<int, 240, 240> imagePixels; };
    
    // In your managed class
    HolderOfUnmanagedThings* unmanaged = new HolderOfUnmanagedThings();
    
    unmanaged->imagePixels(x,y) = y;