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;
}
考えすぎです。使用法が間違っています。クラスのメンバー変数はこのように宣言できません。
リーリー関数呼び出しは実際のパラメーターを使用し、型宣言を持たないため、パラメーターのないコンストラクター呼び出しを除き、他のコンストラクター呼び出しは明確です。関数宣言と誤解される可能性があります。
C++11 以降をサポートするコンパイラを使用している場合は、クラスの定義時にメンバー変数を初期化できます。
リーリーコンパイラによって報告されたエラーは正しいです。ここで括弧を使用してこのメンバーを初期化することはできません。初期化リストを使用するか、等号を直接使用することはできません。
もちろん、ドキュメントを参照できる詳細がいくつかあります:
http://en.cppreference.com/w/...
静的メンバーに変更するか、コンストラクターで初期化します。