1. ホーム
  2. c++

[解決済み] エラー: '...'内のメンバー '...'が非クラス型である場合の要求

2022-01-30 19:05:59

質問

2つのコンストラクタを持つクラスがあります。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 ()()’

これはなぜか、どうすればうまくいくのか。

どうすれば解決するの?

Foo foo2();

に変更する。

Foo foo2;

コンパイラが

Foo foo2()

関数宣言として、名前 'foo2'、戻り値の型 'Foo' を指定しています。

しかし、その場合、次のように変更すると Foo foo2 というエラーが表示されることがあります。 " call of overloaded ‘Foo()’ is ambiguous" .