用预定义的值初始化结构体


#include <iostream>
using namespace std;
int main()
{
    struct naming
    {
        int numline;
        string numname;
    } naming = {{1,"ONE"},{2,"TWO"}};
  cout<<naming.numline<<":"<<naming.numname<<std::endl;
return 0;
}

这个错误发生:

main.cpp:10:33: error: braces around scalar initializer for type int
} naming = {{1,"ONE"},{2,"TWO"}};                                             

你有

struct naming { … } naming = …

意味着您正在创建单个naming对象。但是你的初始化项

{{1,"ONE"},{2,"TWO"}}

不符合这个意图。

看起来您正在尝试初始化naming对象的集合。如果是这种情况,你应该让它成为一个std::vector<naming>而不是一个单一的对象:

struct naming { … }; // definition of naming
std::vector<naming> namings = {{1, "ONE"}, {2, "TWO"}}; // collection of objects

然后你可以像这样访问单独的命名对象:

// access the first element:
std::cout << namings.at(0).numline << ":" << namings.at(0).numname << std::endl;
// access the second element:
std::cout << namings.at(1).numline << ":" << namings.at(1).numname << std::endl;

由于要存储两个值,因此必须创建一个结构类型的数组。

#include <iostream>
using namespace std;
int main()
{
    struct naming
    {
        int numline;
        string numname;
    } naming[] = {{1,"ONE"},{2,"TWO"}};
    cout<<naming[0].numline<<":"<<naming[0].numname<<std::endl;
    cout<<naming[1].numline<<":"<<naming[1].numname<<std::endl;
    return 0;
}

最新更新