0

我有这个类和它的对象的二维数组:

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;
4

2 回答 2

0

看来您想要指向数组的指针。的第 2 维fooArray1构成 2 个元素。有一个特殊的语法如下:

Foo *(*fooArray3)[2] = &fooArray1[2];  // compiles

上面的语法意味着:fooArray3是一个指向 2 个Foo元素数组的指针。

但是我相信你可能不想要这么复杂的语法。你应该改变你的设计,你可以用简单的数据类型或std容器来保存数据。

于 2013-03-06T10:24:37.953 回答
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;
于 2013-03-06T10:29:29.087 回答