エラー: '..' 内の非クラス型のメンバー '..' の要求 質問する

エラー: '..' 内の非クラス型のメンバー '..' の要求 質問する

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"

おすすめ記事