나는 구조체C++은 클래스 생성에 클래스 생성 멤버를 사용합니까?
struct MyStruct {
MyStruct(XML cfg) { ... }
int m_1, m_2, ... ;
}
그리고 컴파일러는 MYSTRUCT 빈 생성자
error: no matching function for call to ‘MyStruct::MyStruct()’
MyClass(XML cfg) { m_struct = MyStruct(cfg); }
내가 TEH 상속 플레이를 해달라고 생각이 없음을 불평 이제
class MyBaseClass {
public:
MyBaseClass() {}
MyStruct m_struct;
}
class MyClass : public MyBaseClass {
public:
MyClass(XML cfg) { m_struct = MyStruct(cfg); }
}
수업을해야합니까 역할은 그렇다. 그러나 그것이 사실일지도 모르는 것에 따라 나는 완전을 위해 그것을 유지했다. MyStruct에 대해 명시 적으로 빈 생성자를 호출하지 않습니다. m_struct가 멤버이기 때문에 MyClass 클래스가 그렇게합니까?
그렇다면 멤버를 초기화하지 않는 방법이 있습니까? 아니면 포인터로만 멤버로 사용할 수 있습니까?
은 난 그냥 내 구조에 빈 생성자를 추가하거나
MyClass(XML cfg) : m_struct = MyStruct(cfg) {}
에 생성자를 변경하여이 문제를 해결할 수 있습니다 알고 있지만 정확히 여기 무슨 일이 일어나고 있는지 알고 궁금합니다.
'struct'와'class'는 같습니다. 여기서는 유용한 범주를 형성하지 않습니다. – juanchopanza
공용 멤버가 두 개인 경우에만 struct가 사용됩니다. 클래스 자체는 여기에 제 예제보다 훨씬 더 많이 포함하고 있습니다. 저는 제 예제에서 minimals를 시도하려고합니다. – chrise
상속은 실제로 여기서 아무런 역할을하지 않습니다. MyClass를 완전히 제거하고, MyBaseClass를 인스턴스화하며, 정확히 동일한 문제를 가질 수 있습니다. – WhozCraig