0
Candidate::Candidate ()
{

}

それは何もしていません。そのまま記述しないと、次の行を実行できません。

Candidate *list = new Candidate [10];

なんで?

Error: no default constructor exists for the class "Candidate"
4

2 に答える 2

2

動的配列の割り当てを可能にするにnew Candidate[10]は、のデフォルトコンストラクターが使用可能であるCandidate必要があります。つまり、引数を取ることができなければなりません。に独自のコンストラクターをCandidate指定すると、引数の数に関係なく、通常はコンパイラーによって自動的に定義される暗黙のデフォルトコンストラクターは定義されません。したがって、本体が空の場合でも、自分で用意する必要があります。§12.1/5を参照してください。

クラスのデフォルトのコンストラクターは、引数なしで呼び出すことができるXクラスのコンストラクターです。Xクラスのユーザー宣言コンストラクターがない場合X、パラメーターを持たないコンストラクターは、デフォルトとして暗黙的に宣言されます(8.4)。

コンパイラはデフォルトのデフォルトコンストラクタを暗黙的に定義するため、クラスは次のように問題ありません。

class Candidate
{ }; // Compiler provides a default constructor

ただし、他のコンストラクターを指定するとすぐに、暗黙のデフォルトコンストラクターは提供されなくなります。

class Candidate
{
 public:
  Candidate(int x);
  // A user-defined constructor is provided so the default constructor
  // must be defined explicitly
};
于 2012-12-01T18:39:50.453 に答える
1

クラスに追加のコンストラクターがある可能性があります。コンストラクターが定義されている場合、コンパイラーはデフォルトのコンストラクターを生成しません。

于 2012-12-01T18:36:09.367 に答える