正确转换 2D 数组的成员变量
Properly casting a member variable for a 2D array
我收到编译错误,因为我无法正确指定类成员变量作为指向 2D 数组的指针。 该板有许多接收指向 2D 数组的指针的示例,但在每种情况下,指针都会立即用于访问数组中的数据,这不是我正在做的事情。 我想保存指向 2D 数组的指针,以便在类中常规使用。 我无法确定正确的演员表。
无论我尝试什么,我都会收到这样的错误。 错误 C2440:"类型转换":无法从 ... 自。。。
此外,我无法将成员变量分配给 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.
};
当您声明参数时
int* _2dIn[3]
您实际上声明了一个指针数组,而不是指向数组的指针。
你必须使用释义来获得正确的含义:
int (*_2dIn)[3]
您的问题是该成员是指向int
的指针数组,其布局与 2D 数组不同(2D 数组中没有指针)。
你可以向构造函数int _2dIn[][3]
参数,但这实际上只是一个伪装的int (*_2dIn)[3]
- 即指向数组的指针。当您传入 2D 数组时,它会自动进行数组到指针的转换,并且您将获得指向第一个元素的指针。如果随后将成员设置为相同类型,则根本不需要强制转换任何内容。
但是,处理这样的数组可能会给您带来麻烦。如果 C
对象的寿命超过传递给它的数组,它将持有指向无效对象的指针。相反,您应该考虑使用标准容器类型,例如 std::array
或 std::vector
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 将包含C样式数组的对象初始化为成员变量(C++)
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 在循环中按顺序遍历成员变量
- c++类声明时,相同的例程,不同的成员变量类型
- 如何从另一个文件继承私有成员变量和公共函数
- 在C++类中,是否必须初始化作为数组的成员变量
- 如何从子成员函数修改父公共成员变量
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 静态 constexpr 类成员变量对多线程读取是否安全?
- C++:是否可以使用非静态成员变量模板?
- 打印所有继承的类成员变量和方法
- 如何在复杂继承中访问静态成员变量
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 成员变量与函数概念检查