C++ C/C++;头文件中的专用数组初始化
我有一个叫做Cal的类,它是.cpp和.h Headerfile已经C++ C/C++;头文件中的专用数组初始化,c++,arrays,header,initialization,C++,Arrays,Header,Initialization,我有一个叫做Cal的类,它是.cpp和.h Headerfile已经 class Cal { private: int wa[2][2]; public: void do_cal(); }; .cpp文件已被删除 #include "Cal.h" void Cal::do_cal() { print(wa) // where print just itterates and prints the elements in wa } 我的问
class Cal {
private:
int wa[2][2];
public:
void do_cal();
};
.cpp文件已被删除
#include "Cal.h"
void Cal::do_cal() {
print(wa) // where print just itterates and prints the elements in wa
}
我的问题是如何初始化数组wa
?我就是不能让它工作
我试过:
int wa[2][2] = {
{5,2},
{7,9}
};
在头文件,但我得到错误,说我不能这样做,因为它对iso..的东西
还尝试在构造函数中初始化数组wa
,但也不起作用。。我错过了什么
谢谢您不能在类声明中初始化数组元素。我最近试图找到一种方法来做到这一点。据我所知,您必须在初始化函数中执行此操作,一次一个元素
Cal::Cal{
wa[0][0] = 5;
wa[0][1] = 2;
wa[1][0] = 7;
wa[1][1] = 9;
}
有可能(也可能)有更好的方法来实现这一点,但从我上周的研究来看,这是如何使用多维数组实现的。
如果有人有更好的方法,我很感兴趣。你做起来不容易。如果不想像中那样单独指定每个元素,可以创建一个静态数组和
memcpy
(对于非平凡数组大小,这可能会更快):
如果它可以是静态的,您可以在.cpp文件中初始化它。在类声明中添加static关键字:
class Cal {
private:
static int wa[2][2];
public:
void do_cal();
};
并在.cpp文件的文件范围中添加:
#include "Cal.h"
int Cal::wa[2][2] = { {5,2}, {7,9} };
void Cal::do_cal() {
print(wa) // where print just itterates and prints the elements in wa
}
如果你从不改变它,这将很好地工作(同时使它保持不变)。但是,您只能得到一个与类的每个实例共享的实例 memcpy在这里很危险。如果将来有人更改了一个数组的维度或类型,而没有在另一个数组中反映这些更改…是的,但是任何其他解决方案都会遇到同样的问题。在这种情况下,您可以很容易地在这里插入一个断言(sizeof(wa)==sizeof(default_wa)),以防止出现这种情况;int wa[count(default_wa)][count(default_wa[0])使用
#定义计数(数组)((sizeof(数组))/(sizeof(数组[0]))
很好,Christoph,我以前做过。我讨厌每次需要时都定义count()——这应该是一个内置功能。我还应该指出,您可以在构造函数中使用静态,而不是将默认值放在命名空间之外。但前提是不需要内联构造函数。它增强了可读性。
#include "Cal.h"
int Cal::wa[2][2] = { {5,2}, {7,9} };
void Cal::do_cal() {
print(wa) // where print just itterates and prints the elements in wa
}