当前位置:  开发笔记 > 编程语言 > 正文

头文件中的C/C++私有数组初始化

如何解决《头文件中的C/C++私有数组初始化》经验,为你挑选了3个好方法。

我有一个名为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在构造函数中初始化数组,但也没有工作..我错过了什么?

谢谢



1> Rob K..:

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

如果你永远不改变它,这将很好地工作(以及使它成为常量).您只能获得与您的班级的每个实例共享的一个.



2> Perchik..:

您无法在类声明中初始化数组元素.我最近试图找到一种方法来做到这一点.根据我的学习,你必须在你的初始化函数中做到这一点,一次一个元素.

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

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



3> Adam Rosenfi..:

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

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

Cal::Cal
{
    memcpy(&wa[0][0], &default_wa[0][0], sizeof(wa));
}

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有