我正在编译错误,因为我无法正确指定类成员变量作为指向2D数组的指针。这个板有许多接收指向2D数组的指针的例子,但是在每种情况下都会立即使用指针来访问数组中的数据,这不是我正在做的事情。我想将指针保存到2D数组,以便在类中使用。我无法确定正确的演员。
无论我尝试什么,我都会收到这样的错误。 错误C2440:'type cast':无法从...转换为...
此外,我无法将成员变量指定为NULL。
我正在使用MS VC ++ 2008 Express。
这是我的代码,简化:
int _tmain(int argc, _TCHAR* argv[])
{
int _2D[2][3] = { {1,2,3}, {11,22,33} };
return 0;
}
class C
{
public:
C(int* _2dIn[3]) { // <- I don't know how to cast this properly.
init();
m_p2d = (int *[3])_2dIn; // <- The casting error always points to this line.
}
~C(void);
void init(void) {
m_p2d = NULL; // <- This is my second problem.
}
private:
int* m_p2d[3]; // <- And I don't know how to specify this either.
};
答案 0 :(得分:0)
你的问题是该成员是指向int
的指针数组,它与2D数组的布局不同(2D数组中没有指针)。
您可以为构造函数int _2dIn[][3]
创建参数,但这实际上只是伪装的int (*_2dIn)[3]
- 即指向数组的指针。当您传入2D数组时,它会自动进行数组到指针转换,并获得指向第一个元素的指针。如果你然后使该成员成为同一类型,则根本不需要投射任何东西。
但是,处理这样的数组可能会让您遇到麻烦。如果C
对象超过传递给它的数组,它将持有指向无效对象的指针。相反,您应该考虑使用标准容器类型,例如std::array
或std::vector
。
答案 1 :(得分:0)
声明参数时
int* _2dIn[3]
你实际上声明了一个指针数组,而不是一个指向数组的指针。
你必须使用parantheses来获得正确的含义:
int (*_2dIn)[3]