13

これはばかげた質問かもしれませんが、C++ で独自のデフォルト コンストラクターを作成する方法について、ウェブ上で多くの情報を見つけることができません。パラメータのない単なるコンストラクタのようです。ただし、次のようにデフォルトのコンストラクターを作成しようとしました。

Tree::Tree()  {root = NULL;}

私も試しました:

Tree::Tree() {}

これらのいずれかを試すと、エラーが発生します。

オーバーロードされた関数 "Tree::Tree" のインスタンスが、指定された型と一致しません。

これが何を意味するのか理解できないようです。

ファイルにこのコンストラクターを作成してい.cppます。.hヘッダー ( ) ファイルでも何かを行う必要がありますか?

4

4 に答える 4

16

メンバー関数 (およびコンストラクタとデストラクタを含む) は、クラス定義で宣言する必要があります。

class Tree {
public:
    Tree(); // default constructor
private:
    Node *root;

};

次に、.cpp ファイルで定義できます。

Tree::Tree() : root(nullptr) {
}

nullptrfor C++11を投入しました。C++11 をお持ちでない場合は、 を使用してroot(0)ください。

于 2012-11-14T19:35:15.567 に答える
5

メンバー関数の定義を作成するだけでは不十分です。メンバー関数も宣言する必要があります。これはコンストラクターにも適用されます。

class Tree {
public:
    Tree(); // declaration
    ...
};

Tree::Tree() // definition
    : root(0) {
}

補足として、メンバー初期化リストを使用する必要があり、使用しないNULLでください。nullptrC++ 2011では後者に使用したいのですが、C++ 2003 では0.

于 2012-11-14T19:35:18.390 に答える
4

はい、ヘッダーで宣言する必要があります。たとえば、tree クラスの宣言内に次を配置します。

class Tree {
    // other stuff...
    Tree();
    // other stuff...
};
于 2012-11-14T19:33:12.130 に答える