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
}

変更しない場合は、これでうまくいきます(constにすることもできます)。ただし、クラスの各インスタンスと共有されるものは1つだけです。

于 2009-02-06T18:50:57.483 に答える
7

クラス宣言で配列要素を初期化することはできません。私は最近、まさにそれを行う方法を見つけようとしました。私が学んだことから、初期化関数で一度に 1 要素ずつ実行する必要があります。

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 の answer のように各要素を個別に指定したくない場合は、1 つの静的配列と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 に答える