1

以下のクラスには、コレクションクラスから継承するクラスがあります。このクラスでは、後で派生クラスに実装する必要がある仮想関数が定義されています。派生クラスのコンストラクターを除いて、メンバー関数の定義を.cppファイルにまだ含めていません。ただし、プロジェクトをビルドすると、次のエラーメッセージが表示されます

'{'トークン|の前にクラス名が必要です

私は自分が知っていることをすべて試しましたが、コードのどこが間違っているのか、そしてそれを修正する方法を理解するのに支援が必要です。

    #ifndef VARIABLEARRAY_H
#define VARIABLEARRAY_H

#include "Collection.h"

using namespace std;

class VariableArray: public Collection{ 

        int* list[];// dynamic array that is resized on demand

    public:
        VariableArray();

};
#endif

どんな助けでも大歓迎です。

4

3 に答える 3

1

Collection記号が翻訳単位で既に認識されていますか?

以下を追加することもできます:

#include "Collection.h"

(または正しい名前が何であれ)クラス定義の前。

于 2012-04-23T23:41:16.823 に答える
0

コレクションを前方宣言することもできると思います:

class Collection;

class VariableArray : public Collection {
....
};
于 2012-04-23T23:44:32.243 に答える
0

Collectionがコンパイラで利用可能かどうかをどのように判断しましたか? のclass宣言は、ファイルの前処理された出力にCollection表示されますか、または対応するソース ファイルは何ですか?VariableArray.cpp

前処理された出力を見ると、次のことを判断するのに役立ちます。

  • 名前空間の汚染が問題である場合 (例:#defineと衝突Collection)
  • Collection宣言が宣言の前に本当に利用可能である場合VariableArray

名前空間の汚染の問題でない場合は#include、複数のヘッダー ファイルで同じガードを使用しているかどうかを確認します。

于 2012-04-23T23:58:43.410 に答える