Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;头文件中的专用数组初始化_C++_Arrays_Header_Initialization - Fatal编程技术网

C++ C/C++;头文件中的专用数组初始化

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 } 我的问

我有一个叫做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
}
我的问题是如何初始化数组
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
}