1

我需要一个变量来保存 22 对整数(网格中的位置),所以我想有一个矩阵数组。所以在我的头文件中是:

int points[22][2];

但是当我将以下内容放入对象的构造函数中时:

this->points = {{1,2},{2,3},...};

它说“必须是一个表达式必须是一个可修改的左值”我尝试使用 const 关键字并将其作为头文件中的指针,如此处所述表达式必须是一个可修改的左值

我也尝试过创建一个单独的二维数组,然后分配它,但这也不起作用。

int points2 = {{1,2},{2,3},...};
this->points = points2;

我习惯了 Java,对 C++ 不太熟悉。有一个默认构造函数将分配上述值,还有一个构造函数将矩阵作为参数。

以下确实有效:

this->point[1][1] = 4;

但这意味着我不能将另一个值作为参数传递,我最终会在默认构造函数中得到 44 行凌乱的代码!我打算使用一个带有 2 个整数的结构并将它们放在一个向量中,这似乎有点矫枉过正,这意味着我需要 22 个向量插入,然后我什至用手动值调用构造函数,我只是认为必须做一个更好的方法:)

谢谢

4

2 回答 2

1

由于您使用的是 C++,因此更好的选择是使用 a vectorof pairs of ints。

像这样声明它:

std::vector<std::pair<int, int> > points;

在您的构造函数中,您可以在初始化时指定大小

: points(22), 

或在任何时候设置它:

points.resize(22);

您可以访问单个坐标

points[1].first = 1;
points[1].second = 44;

或与

points[1] = make_pair(1, 44);

或者您可以构建它而不必担心超出其分配的大小

points.push_back(make_pair(1, 44));

ETC

于 2012-04-13T00:03:24.623 回答
0

问题的根本原因是数组在 C++ 中不算作实值。它们在许多方面都不合标准——您刚刚遇到过其中一种。任何普通类型都可以按您的预期工作。不幸的是,对于我们这些不是语言专家的人来说,Visual Studio 抛出的错误毫无帮助。

您必须在堆栈上创建一个数组,然后手动循环并分配所有值。

于 2012-04-13T00:10:43.287 回答