如何在c ++中键入此类型?

时间:2014-08-20 18:33:29

标签: c++ pointers typedef

Foo* (*)[8]?

我试图将它视为三重*,如此:

Foo*** = new Foo* [6][8];

但是我得到了不匹配的类型,所以我想只输入实际类型但不确定符号应该是什么?它是一个固定的6x8指针矩阵。

3 个答案:

答案 0 :(得分:3)

你在问题​​的第一行有答案

using Foo2D = Foo*(*)[8];
Foo2D ptr = new Foo* [6][8];

或者,如果您想使用typedef

typedef Foo*(*Foo2D)[8];

但是,不要使用其中任何一种。如果在编译时已知大小,请使用vector<vector<unique_ptr<Foo>>>array<array<unique_ptr<Foo>, 8>, 6>

如果使用Boost是一个选项,那么有Boost.MultiArray库用于处理多维矩阵。

答案 1 :(得分:2)

Foo *mat[6][8];

如果它是指针矩阵(而不是指向矩阵的指针),请不要new矩阵。相反,您需要new的{​​{1}}个实例。

Foo

不要忘记删除所有for(int j = 0; j < 8; ++j) for(int i = 0; i < 6; ++i) mat[i][j] = new Foo; 。更好的是,使用C ++ 11的真棒Foo和嵌套的std::unique_ptr

重新阅读问题后,

编辑,您似乎也想要一个动态分配的矩阵。这是指向这种矩阵的指针的类型:

std::array

答案 2 :(得分:0)

你可以这样打破它:

typedef Foo *FooPtr;
typedef FooPtr FooPtrMatrix[6][8];

FooPtrMatrix *foo = new FooPtrMatrix;