在结构类型之后定义结构变量

时间:2013-04-17 10:05:41

标签: c++

#include <iostream>

struct people 
{
    int id;
} person; // that part

int main()
{
    person = {3};   
    std::cout << person.id;

    return 0;
}

我想问你关于初始化一个结构(好吧,不是初始化......创建结构类型......我真的不知道你怎么称呼它)。一旦我在结构后看到一些关键字,就像这里的“人”。所有没有任何typedef。

我做了一些研究,发现它用于在结构之后直接定义变量。

但是,我上面发布的代码没有编译 - 它说语法错误,缺少分号和垃圾,这意味着表达式无效。

这是用于什么,以及如何使用它?

3 个答案:

答案 0 :(得分:7)

您不能在正常赋值中使用结构初始化语法,必须在声明变量时完成:

struct people 
{
    int id;
} person = { 3 };

如果你有一个兼容C ++ 11的编译器,你可以稍后使用uniform initialization语法 copy

person = people { 3 };

答案 1 :(得分:2)

struct people 
{
    int id;
} person; // that part

person是people类型的全局对象。

person = {3};

在C ++ 03中是不正确的,在C ++ 11中是正确的,因为{3}将被视为people{3}

答案 2 :(得分:0)

  

一旦我在结构后看到一些关键字,就像这里的“人”一样。

这不是关键字,而是名称。如果您愿意,可以在定义类型的同一语句中声明类类型的变量。它相当于两个单独的声明:

struct people 
{
    int id;
};
people person;
  

但是,我上面发布的代码无法编译

听起来你的编译器不支持C ++ 11(特别是从支持的列表中分配),或者你正在编译时禁用它。

如果你不能使用C ++ 11,那么你必须分别指定每个成员:

// person = {3};   // C++11 only
person.id = 3;

或声明并初始化本地对象并从中分配:

people temp = {3};
person = temp;

或在其声明中初始化它,而不是推迟到main

struct people
{
    int id;
} person = {3};