类的struct成员的默认初始值

0 c++

以下片段来自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(){};
};
Run Code Online (Sandbox Code Playgroud)

Chr*_*isW 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(){};
};
Run Code Online (Sandbox Code Playgroud)

......或者,像这样......

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(){};
};
Run Code Online (Sandbox Code Playgroud)

请注意,在第二个示例中,我发现初始化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(){};
};
Run Code Online (Sandbox Code Playgroud)