4

我有一个名为 Cal 的类,它是 .cpp 和 .h 对应的

头文件有

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..something。

还尝试wa在构造函数中初始化数组,但这也不起作用。我错过了什么?

谢谢

4

3 回答 3

10

如果它可以是静态的,则可以在 .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
}

如果你从不改变它,这会很好用(连同使它成为常量)。但是,您只能获得与您班级的每个实例共享的一个。

于 2009-02-06T18:50:57.483 回答
7

您不能在类声明中初始化数组元素。我最近试图找到一种方法来做到这一点。根据我所学到的,您必须在初始化函数中执行此操作,一次一个元素。

Cal::Cal{
   wa[0][0] = 5;
   wa[0][1] = 2;
   wa[1][0] = 7;
   wa[1][1] = 9;
}

有可能(并且很可能)有更好的方法来做到这一点,但根据我上周的研究,这是如何使用多维数组来做到这一点的。如果有人有更好的方法,我很感兴趣。

于 2009-02-06T16:12:49.567 回答
5

你不能轻易做到。如果您不想像 Perchik's answer中那样单独指定每个元素,您可以创建一个静态数组memcpy(对于非平凡的数组大小,这可能会更快):

namespace
{
    const int default_wa[2][2] = {{5, 2}, {7, 9}};
}

Cal::Cal
{
    memcpy(&wa[0][0], &default_wa[0][0], sizeof(wa));
}
于 2009-02-06T16:17:53.923 回答