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

C++ CLI Eigen: setting values in Matrix

这是我的代码。

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。

我从来没有用过 Eigen,但我认为它在抱怨 imagePixels 的类型。

Matrix<int, 240, 240>* imagePixels;

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

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

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

编辑

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

有两种解决方法:

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

    (*imagePixels)(x,y) = y;
    
  2. 声明一个非托管结构来将您的矩阵保存为一个值,并在您的 class 中有一个指向它的指针。

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