gpt4 book ai didi

C++ 类在类构造上构造成员吗?

转载 作者:行者123 更新时间:2023-11-30 03:33:04 25 4
gpt4 key购买 nike

我有一个结构

struct MyStruct {
MyStruct( XML cfg ) { ... }
int m_1, m_2, ... ;
}

还有一个类

class MyBaseClass {
public:
MyBaseClass() {}
MyStruct m_struct;
}

class MyClass : public MyBaseClass {
public:
MyClass( XML cfg ) { m_struct = MyStruct( cfg ); }
}

现在编译器提示 MyStruct 没有空构造函数

error: no matching function for call to ‘MyStruct::MyStruct()’
MyClass( XML cfg ) { m_struct = MyStruct( cfg ); }

我不认为继承起着重要的作用,但为了完整起见,我保留了它,因为它可能是这种情况。我从来没有明确地为 MyStruct 调用一个空的构造函数。 MyClass 类这样做是因为 m_struct 是它的成员吗?
如果是这种情况,有没有办法让它不初始化成员,或者这是否只能将指针作为成员?

我知道我可以通过向我的结构添加一个空构造函数或将构造函数更改为

来解决这个问题
MyClass( XML cfg ) : m_struct = MyStruct( cfg ) {}

但我很想知道这里究竟发生了什么。

最佳答案

does a class construct members on class construction?

当然可以。问题出现在MyBaseClass的构造函数中,它没有显式初始化成员m_struct,然后默认初始化,但是MyStruct没有' 有一个默认的构造函数。

不仅对于数据成员如此,对于基类对象也是如此。对于MyClass的构造函数,没有显式指定基类的构造函数,则会调用MyBaseClass的默认构造函数,导致如上错误解释。

您可以为 MyStruct 添加默认构造函数,或使用 member intializer listMyBaseClass 的构造函数中,显式调用 MyStruct::MyStruct( XML cfg ) 来初始化成员 m_struct。例如

MyBaseClass() : m_struct(some_thing) {}

关于C++ 类在类构造上构造成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com