【发布时间】:2017-04-05 05:49:50
【问题描述】:
我确实有一个结构
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 ); }
我不认为继承在 ehre 中起作用,但我保留它是为了完整性,因为它可能是这种情况。我从不为 MyStruct 显式调用空构造函数。 MyClass 类这样做是因为 m_struct 是它的成员吗?
如果是这种情况,有没有办法让它不初始化成员,或者只有指针作为成员才有可能?
我知道我可以通过在我的结构中添加一个空的构造函数或将构造函数更改为来解决这个问题
MyClass( XML cfg ) : m_struct = MyStruct( cfg ) {}
但我很想知道这里到底发生了什么。
【问题讨论】:
-
struct和class是相同的。它们在这里没有形成有用的类别。 -
我使用一个结构,因为它只包含几个公共成员。该类本身包含的内容比我的示例要多得多,我只是尝试在我的示例中保持简约
-
继承在这里确实不起作用。完全可以去掉MyClass,实例化MyBaseClass,问题一模一样。
-
@chrise 是的,我想我误读了这个问题。但如果你想要简约,你可以使用
struct来处理一切。它涉及更少的打字(你不必到处说public。 -
你可以在这里找到一个很好的答案:stackoverflow.com/questions/926752/…
标签: c++ constructor initialization