1

クラス内で変数を定義し、同時に値を指定すると、エラーが発生します。これの理由は何ですか?

ご覧のとおり、これは機能しません...

class myClass {
    private:
        int x = 4; // error
};

しかし、変数を未定義のままにしておくと、次のようになります。

class myClass {
    private:
        int x;
};
4

6 に答える 6

11

メンバーの初期化を使用している人は他にいないので、紹介します。

class myClass {
    private:
        int x;
    public:
        myClass() : x (4){}
};

コンストラクターの本体で代入するよりも、常にこれを使用することをお勧めします。これは、本体が開始されるまでに、すべてのユーザー定義メンバーが、そう言っているかどうかにかかわらず既に初期化されているためです。一度実行して、実際に非ユーザー定義メンバーを初期化することをお勧めします。これ、非静的constメンバーと参照メンバーの両方で機能する唯一の方法です。

たとえばx、本体で初期化されておらず、割り当てられているため、次は機能しません。

class myClass {
    private:
        const int x;
    public:
        myClass() {x = 4;}
};

ただし、メンバー初期化子を使用すると、すぐに初期化するため、次のようになります。

class myClass {
    private:
        const int x;
    public:
        myClass() : x (4){}
};

また、int x = 4;構文はC++11で完全に有効であり、必要な初期化に対応しているため、使用を開始するとメリットがあります。

于 2012-07-11T20:31:58.863 に答える
2

コンストラクターで変数を初期化します。

class myClass {
private:
    int x;

public:
   myClass()
   {
       x = 4; // hope that it will work
   }
};

更新された回答: chrisに よると、メンバーの初期化を使用することをお勧めします

class myClass {
private:
    const int x;
public:
    myClass() : x (4){}
};
于 2012-07-11T20:22:39.937 に答える
0

あなたのクラスは設計図のようなものです。それに関連付けられているストレージはありません。クラスのオブジェクトをインスタンス化するとき、それはその設計図に基づく建物に似ています。オブジェクトにはストレージがあり、メンバー変数に与える値を保持できます。

また、他の人が指摘したように、C++ 11 でやりたいことを行うことは可能です。チェックアウト: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm

于 2012-07-11T20:24:37.150 に答える
0

C++03では、

クラス内で初期化できるのは、static const 整数データ メンバーのみです。

コンストラクターで初期化するか、データ メンバーを作成しますstatic const

class myClass {
    private:
        int x;
    public:
      myClass() {
        x = 4;
      }
};

また

class myClass {
    private:
     static const int x = 4;
};
于 2012-07-11T20:25:11.323 に答える
0

インスタンス変数は、setter メソッド、IE: を使用して、setX(input)またはコンストラクター内で定義することになっています。

于 2012-07-11T20:23:11.510 に答える
0

これを行う:

class myClass
{
private:
    static const int x = 4;
};

x静的でも定数でもない場合は、int x;代わりにonly を使用xし、クラスのコンストラクターで初期化します。

于 2012-07-11T20:28:33.433 に答える