Candidate::Candidate ()
{
}
それは何もしていません。そのまま記述しないと、次の行を実行できません。
Candidate *list = new Candidate [10];
なんで?
Error: no default constructor exists for the class "Candidate"
動的配列の割り当てを可能にするに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
};
クラスに追加のコンストラクターがある可能性があります。コンストラクターが定義されている場合、コンパイラーはデフォルトのコンストラクターを生成しません。