以下片段来自VC ++ 2008 Express Edition。 说,我有一个类,其成员是一个结构。我正在尝试为此类的成员变量定义默认值。为什么这不起作用?
struct Country{
unsigned chart id;
unsigned int initials;
std::string name;
};
class world{
private:
Country _country;
unsigned int _population;
public:
world(){};
world():
_country():
id('1'), initials(0), name("Spain") {};
_population(543000) {}
:
:
~world(){};
};
答案 0 :(得分:6)
有两种方法可以初始化国家/地区成员数据。像这样......
struct Country{
unsigned char id;
unsigned int initials;
std::string name;
};
class world{
private:
Country _country;
public:
world()
{
_country.id = '1';
_country.initials = 0;
_country.name = "Spain";
}
~world(){};
};
......或者,像这样...
struct Country{
unsigned char _id;
unsigned int _initials;
std::string _name;
Country(
unsigned char id,
unsigned int initials,
const std::string& name
)
: _id(id)
, _initials(initials)
, _name(name)
{}
};
class world{
private:
Country _country;
public:
world()
: _country('1', 0, "Spain")
{
}
~world(){};
};
请注意,在第二个示例中,我发现初始化Country实例更容易,因为我将构造函数定义为Country结构的成员。
或许,您可能希望为Country类型提供默认构造函数:
struct Country{
unsigned char _id;
unsigned int _initials;
std::string _name;
Country()
: _id('1')
, _initials(0)
, _name("Spain")
{}
};
class world{
private:
Country _country;
public:
world()
{
}
~world(){};
};
答案 1 :(得分:2)
结构是聚合类型。
由于它没有构造函数,你不能使用普通括号初始化它,但是你可以像初始化数组一样使用花括号。