当我包含child.h并创建一个子变量时,它说没有为子项存在默认构造函数?顺便说一下:
Child::Child(const Child& otherChild) {
this->name = otherChild.GetName();
}
制作复制构造函数的正确方法。我可以将指针传入此复制构造函数吗?或者如果我想传入一个指针,它应该是这样的:
Child::Child(const Child *otherChild) {
this->name = otherChild->GetName();
}
父:
#pragma once
#include <string>
#include <ostream>
#include "Child.h"
using namespace std;
class Parent {
public:
Parent(string name);
Parent(const Parent& otherParent);
friend ostream& operator<<(ostream & os, const Parent& parent);
Parent operator=(const Parent& otherParent) const;
string GetParentName() const;
Child GetChild() const;
private:
string name;
Child myChild;
};
CPP:
#include "Child.h"
Child::Child(string name) {
this->name = name;
}
Child::Child(const Child& otherChild) {
this->name = otherChild.GetName();
}
string Child::GetName() const
{
return name;
}
头:
#pragma once
#include <string>
#include <ostream>
using namespace std;
class Child {
public:
Child(string name);
Child(const Child& otherChild);
string GetName() const;
private:
string name;
};
答案 0 :(得分:5)
Child
类只能通过向构造函数提供参数来构造;你没有提供一个&#34;默认构造函数&#34;没有参数。因此,Parent类的每个构造函数都需要提供参数来初始化其Child
成员。您需要在构造函数的主体实际开始运行之前执行此操作,因此C ++具有特殊的语法。它看起来像这样:
Parent::Parent(std::string name)
: myChild("childname")
{
}
您可能想重新考虑您的类结构,因为现在的方式,每个Parent
对象必须有Child
;你真的没有办法表达没有孩子的父母。
答案 1 :(得分:1)
类Parent具有Child
类型的数据成员class Parent {
public:
Parent(string name);
Parent(const Parent& otherParent);
friend ostream& operator<<(ostream & os, const Parent& parent);
Parent operator=(const Parent& otherParent) const;
string GetParentName() const;
Child GetChild() const;
private:
string name;
Child myChild;
^^^^^^^^^^^^^
};
对于这个数据成员,它被称为默认构造函数,因为它似乎没有初始化父构造函数的mem-initializer-list中的数据成员。
你需要初始化它的谎言
Parent::Parent(string name) : myChild( SomeValue )
{
//...
}