検索

ホームページ  >  に質問  >  本文

c++ - 在类的成员变量定义时,使用此变量的带参数的构造函数来初始化,被编译器误解、报错。如何才能达到目的?

using namespace std;

class A
{
public:
    A(int a) :m(a) {};
    void show() {
        cout << "m=" << m << endl;
    }
private:
    int m;
};

class B
{
public:
    A aa(5);//VS2015此处报错:“应输入类型说明符”。
//说明编译器把此处理解成了:声明一个名为aa、返回值为A,有一个入参的成员函数了。
//而本来的意图只是想定义一个名为aa的成员对象
};

int main(void)
{
    A a(44);
    a.show();
    return 0;
}
ringa_leeringa_lee2803日前556

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-17 15:05:04

    考えすぎです。使用法が間違っています。クラスのメンバー変数はこのように宣言できません。

    リーリー

    関数呼び出しは実際のパラメーターを使用し、型宣言を持たないため、パラメーターのないコンストラクター呼び出しを除き、他のコンストラクター呼び出しは明確です。関数宣言と誤解される可能性があります。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 15:05:04

    C++11 以降をサポートするコンパイラを使用している場合は、クラスの定義時にメンバー変数を初期化できます。
    コンパイラによって報告されたエラーは正しいです。ここで括弧を使用してこのメ​​ンバーを初期化することはできません。初期化リストを使用するか、等号を直接使用することはできません。

    リーリー

    もちろん、ドキュメントを参照できる詳細がいくつかあります:
    http://en.cppreference.com/w/...

    返事
    0
  • 迷茫

    迷茫2017-04-17 15:05:04

    静的メンバーに変更するか、コンストラクターで初期化します。

    返事
    0
  • キャンセル返事