2015-04-02 4 views
1

У меня возникла проблема с инициализацией расширенной структуры в C++.Инициализировать расширенную структуру в C++

struct Struct1 { 
    int property1; 
} 
struct Struct2: Struct1 { 
    int property2; 
} 

int main() { 
    Struct2 struct_var = { 1, 1 }; 
    std::cout << struct_var.property1; 
} 

Я был бы признателен, если кто-то может указать на то, что не так?

+0

Struct2 не является агрегатом и не может быть инициализирован агрегатной инициализацией. –

+0

Как мне инициализировать Struct2? Я думал, что он наследует все от Struct1, и вы можете сделать '{..}'? – einstein

+1

хорошо - даже «эйнштейн» не знает этого! – billz

ответ

4

если вы передадите 2 arguments в инициализаторе, тогда вам необходимо иметь конструктор, который имеет 2 parameters. что-то вроде этого

#include <iostream> 

struct Struct1 { 
    int property1; 
}; 
struct Struct2 : Struct1 { 
public: 
    Struct2(int property1, int property2) 
    { 
     // Struct1::property1 = property1; // this will also work 
     this->property1 = property1; 
     this->property2 = property2; 
    } 
    int property2; 
}; 
int main() { 
    Struct2 struct_var = { 1, 1 }; 
    std::cout << struct_var.property1; 
}