Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在使用构造函数中的对象初始化类_C++ - Fatal编程技术网

C++ 正在使用构造函数中的对象初始化类

C++ 正在使用构造函数中的对象初始化类,c++,C++,我的头类看起来像- class Dog { private: Owner _owner; public: Dog(Owner o); ~Dog(); }; 那么我收到错误的部分是- Dog::Dog(Owner owner){ this -> _owner = owner; } 这看起来很简单,但当我编译时,我得到了这个错误,我真的不知道为什么- “Dog”的构造函数必须显式初始化没有默认构造函数的成员“\u owner” 有什么好主意吗?我是C++

我的头类看起来像-

class Dog {
private:
    Owner _owner;

public:

    Dog(Owner o);
    ~Dog();
};
那么我收到错误的部分是-

Dog::Dog(Owner owner){
    this -> _owner = owner;
}
这看起来很简单,但当我编译时,我得到了这个错误,我真的不知道为什么-

“Dog”的构造函数必须显式初始化没有默认构造函数的成员“\u owner”


有什么好主意吗?我是C++新手,所以我猜想当这个构造函数被称为

时,我会丢失一些与语法相关的

<
Dog::Dog(Owner owner){
    this -> _owner = owner;
}
首先使用默认构造函数所有者构造实例变量_owner,然后为其分配`this->_owner=owner

因此,您必须有一个默认构造函数才能实现这一点,正如您的错误所说,没有可用的构造函数。因此,您必须这样定义它并将其公开:

class Owner {
    public:
    Owner(){ }
};
或 您只需调用复制构造函数ownerconstowner&Owner,而不是使用


请使用。请不要定义任何以u开头的内容。如果必须,请改用尾随u。@Cornstales,所有者对象已在我的main方法中初始化。我只是将数据传递给这个类。@user3528438:这是风格问题。这里没有什么问题。@cornstales在本例中,我相信名称的任何前导都是未定义的行为,因为这些名称是为编译器保留的。所以这不仅仅是样式的问题,一旦我编辑了owner类,错误就消失了。谢谢大家!@亚历克斯,我建议你也做第二个解决方案。这是在构造函数中初始化成员的推荐方法
Dog::Dog(Owner owner)
 : _owner(owner)
{ }