2016-03-07 57 views
-1

的成员我haee这一小段代码中,我想创建一个struct员工。员工可以是经理或工人。我无法访问工会成员。这里是我的代码C++ - 不能够访问一个联盟

#include <iostream> 
#include <string> 
using namespace std; 

struct Employee { 
int id; 
union Person { 
    struct Manager { 
    int level; 
    } manager; 
    struct Worker { 
    string department; 
    } worker; 
} company[3]; 
}; 


int main() { 
Employee one; 
one.id = 101; 
one.company[0].manager.level = 3; 

Employee two; 
two.id = 102; 
two.company[1].worker.department = "Sales"; 

Employee three; 
three.id = 103; 
three.company[2].worker.department = "Marketing"; 
} 

我得到的错误是

arraOfUnions.cc:13:5: error: member 'Employee::Person::Worker Employee::Person::worker' with constructor not allowed in union 
arraOfUnions.cc:13:5: error: member 'Employee::Person::Worker Employee::Person::worker' with destructor not allowed in union 
arraOfUnions.cc:13:5: error: member 'Employee::Person::Worker Employee::Person::worker' with copy assignment operator not allowed in union 
arraOfUnions.cc:13:5: note: unrestricted unions only available with -std=c++0x or -std=gnu++0x 

我不知道我在做什么错。请帮忙 谢谢SO

+0

'的std :: string'不能在C++ 03的结合。在C++ 11 – Jarod42

+0

无限制联盟将需要'Person'构造。 – Jarod42

+0

为什么不能串联? –

回答

2

您的联合中不能有非POD对象,但可以有一个指向非PDO对象的指针(因此string*有效)。

What are POD types in C++?

Pehaps一个const char*就够了,如果你需要的是访问这些字符串字面量“销售” &“营销” -

0

顺便说一句 - 你的数据模型是完全错误的。您不应该使用需要使用类层次结构的联合。

你需要一个基类员工,以及派生类经理。

struct Employee { 
    int id; 
    string department; 
}; 

struct Manager : public Employee 
{ 
    int level; 
} 

和不使用结构采用类

,并有更好的成员命名。像m_company或company_

和不使用命名空间std做,说的std :: string等

class Employee { 
    int _id; 
    std::string _department; 
}; 

class Manager : public Employee 
{ 
    int _level; 
}