【问题标题】:Array initialization within a structure or class结构或类中的数组初始化
【发布时间】:2015-07-09 06:46:38
【问题描述】:

我只是在学习结构和类。我创建了一个示例结构来熟悉它并尝试在其中初始化一个数组。当我编译程序时它给了我错误

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
char arr[5] = {2,3,8,67,87};

struct abc{
char a;
char b;
char c;

char arr[5] = {2,3,8,67,87};
};  

struct abc xyz[5]; 

在声明结构和类时不允许数组初始化吗?

【问题讨论】:

  • 我相信CC++可能有不同的规则......选择一个。
  • 即使你选择 C++,也要提到版本,因为它与答案有关。
  • 我只是想知道这是否可能。任何版本的 C++ 都允许这样做。
  • 选择一种单一语言。是的,C++ 从 C++11 开始就允许这样做。
  • 好的,因为您坚持使用一种语言进行标记(无需等待适用于两种语言的答案),您的代码在 C++ 中运行良好,因为 C++11。见this example

标签: c++ c arrays struct


【解决方案1】:

我猜在 C 中你可以这样做:

struct abc{
char a;
char b;
char c;

char arr[5];
};  

struct abc test= { 5, 2, 3, { 'a', 'b', 'c', 'd', 'e' } };

【讨论】:

  • 这是 c99 中的声明风格。使用它是否明智?
【解决方案2】:

在 C 中,您不能在结构定义中初始化结构的成员。当您声明该结构的变量时,您必须这样做。在 C++ 中,您可以将其作为构造函数的一部分。

【讨论】:

  • 我认为我们不能在结构声明期间初始化成员,而不是定义,结构定义意味着为它分配空间并为其成员赋予一些价值。
  • @Subhajit 可以在结构定义中指定成员的值,以便在实例化结构时(在 C++ 中)成员获取这些值
  • @ juanchopanza,是的,我认为在 c++ 中这是可能的,但定义和实例化是相同的,我猜你的意思是结构声明
  • @Subhajit 我指的是结构类型的定义——它的主体。
【解决方案3】:

struct 中不允许完成数组初始化,但您可以在没有内容的情况下初始化数组的名称和类型。 在c++中

struct student{
int age;
string name;
int scoreOf4subject[4];   
}; 

当您需要在数组中设置 4 个主题的值时,它会是这样的:

student keny;   
keny.scoreOf4subject={90,91,94,93};

【讨论】:

  • 在 C++ 中,你可以做 OP 正在做的事情。见here
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 2013-08-07
  • 1970-01-01
  • 2012-05-02
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多