c++ - 在类的成员变量定义时,使用此变量的带参数的构造函数来初始化,被编译器误解、报错。如何才能达到目的?
ringa_lee
ringa_lee 2017-04-17 15:03:04
0
3
557
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_lee
ringa_lee

ringa_lee

全員に返信(3)
Ty80

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

リーリー

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

いいねを押す +0
Ty80

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

リーリー

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

いいねを押す +0
迷茫

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート