1
#include <iostream>

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

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

    return 0;
}

我想问你关于初始化结构的问题(嗯,不是初始化......创建结构类型......我真的不知道你怎么称呼它)。一旦我在结构之后看到了一些关键字,比如这里的“人”。全部没有任何 typedef。

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

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

这是做什么用的,如何使用它?

4

3 回答 3

7

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

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

如果你有一个 C++11 兼容的编译器,你可以使用统一的初始化语法在以后复制:

person = people { 3 };
于 2013-04-17T10:09:58.757 回答
2
struct people 
{
    int id;
} person; // that part

person 是 type 的全局对象people

person = {3};

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

于 2013-04-17T10:09:35.770 回答
1

一旦我在结构之后看到了一些关键字,比如这里的“人”。

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

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};
于 2013-04-17T10:13:56.253 回答