2 つのコンストラクターを持つクラスがあります。1 つは引数を取らず、もう 1 つは引数を 1 つ取ります。
1 つの引数を取るコンストラクターを使用してオブジェクトを作成すると、期待どおりに動作します。ただし、引数を取らないコンストラクターを使用してオブジェクトを作成すると、エラーが発生します。
たとえば、このコードをコンパイルすると (g++ 4.0.1 を使用)...
class Foo
{
public:
Foo() {};
Foo(int a) {};
void bar() {};
};
int main()
{
// this works...
Foo foo1(1);
foo1.bar();
// this does not...
Foo foo2();
foo2.bar();
return 0;
}
...次のエラーが発生します:
nonclass.cpp: In function ‘int main(int, const char**)’:
nonclass.cpp:17: error: request for member ‘bar’ in ‘foo2’, which is of non-class type ‘Foo ()()’
これはなぜでしょうか、また、どうすればこれを機能させることができるのでしょうか?
ベストアンサー1
Foo foo2();
への変更
Foo foo2;
コンパイラが次のように考えるため、エラーが発生します。
Foo foo2()
名前が「foo2」で戻り値の型が「Foo」の関数宣言の時点。
しかし、その場合、 に変更するとFoo foo2
、コンパイラはエラー を表示する可能性があります" call of overloaded ‘Foo()’ is ambiguous"
。