我有这个类和它的对象的二维数组:
class Foo
{
public:
Foo(int x)
{
value = x;
}
int value;
};
Foo foo1(1), foo2(2), foo3(3), foo4(4);
Foo* fooArray1[4][2] = { {&foo1, &foo2}, {&foo2, &foo3}, {&foo3, &foo4}, {&foo4, &foo1} };
现在我想引用这个数组的第二个维度。 以某种方式:
Foo* fooArray3[2] = fooArray1[2];
但我的编译器一直告诉我:
Unallowed Assignment »Foo* (*)[2]« to »Foo* [2]«
我开始工作的唯一版本是:
Foo** fooArray2 = fooArray1[3];
但是对于这个版本,我必须使用星号运算符访问fooArray2,我不想这样做:
cout << "fooArray2[0]: " << (*fooArray2)[0].value << " fooArray2[1]: " << (*fooArray2)[1].value << endl;
答案 0 :(得分:0)
您似乎想要指向数组的指针。 fooArray1
的第二维构成2个元素。有如下特殊语法:
Foo *(*fooArray3)[2] = &fooArray1[2]; // compiles
上面的语法意味着:fooArray3
是指向指向2 Foo
个元素数组的指针的指针。
但是我相信你可能不会想要这么复杂的语法。您应该使用简单的数据类型或std
容器更改您的设计,以便保存数据。
答案 1 :(得分:0)
我认为你想要的是:
Foo* (&fooArray3)[2] = fooArray1[3];
std::cout << fooArray3[0]->value; // Prints 4
如果你正在使用C ++ 11,那么生活会更愉快:
auto& fooArray3 = fooArray1[3];
std::cout << fooArray3[0]->value; // Prints 4
编辑:根据要求:
Foo* (*fooArray3)[2];
⋮
fooArray3 = &fooArray1[3];
std::cout << (*fooArray3[0])->value;