2つのクラスがあり、そのうちの1つにはデータメンバーとして別のクラスのオブジェクトがあり、そのコンストラクターはクラスオブジェクトを受け入れてデータメンバーオブジェクトを初期化します。
class x{
public:
x(int a, int b)
{ cout << a << b;}
};
class y{
x temp;
y(x& o){ this-> temp = o;}
};
しかし、コンパイラはy :: y(x&)にエラーを表示します:x :: x()を呼び出すための一致する関数がありません
コードブロック16.01を使用しています
コンストラクターを定義しました。
x(int a, int b)
でx
。これは、コンパイラーがコンストラクターを定義しなくなることを意味します。これにはx()
コンストラクターが含まれます。だから、できるだけで構築x
してx(int, int)
。ここにあなたのコードで:
x temp;
y(x& o) { // < No initializer list
デフォルトのコンストラクターを試みましx
たx
が、デフォルトのコンストラクターがありません!1つを定義するか、指定したコンストラクターを使用x
して初期化子リストで構成します。
例えば:
y(x& o) : x(0, 0) {
ただし、オブジェクトを作成してcopy-assignment
から、暗黙的に定義された演算子を使用してオブジェクトを割り当てます。これは少し時間の無駄です。copy-constructor
:を使用すると、これらすべての問題を実際に解決できます。
class x{
...
x(const x ©) { // Define a copy constructor or just use
// the implicitly defined one.
次に、でy
、y
の初期化リストで使用します。
x temp;
y(x& o) : temp(o) {}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加