c ++全局定义和初始化struct

时间:2014-01-28 05:37:34

标签: c++ struct

我正在尝试定义一个简单的结构,拥有该结构类型的单个对象,并初始化该对象的成员。当我全局定义结构和对象并初始化函数内的成员时,它会编译并正确运行。当我在定义结构和对象后立即尝试初始化成员时,出现编译错误。或者至少这是我认为我正在做的事情,错误表明我在某处遗漏了某些东西。

这有效(省略了一些代码):

struct globalArgs_t { //globalArgs_t is the type name
  string input_filename;
  int verbosity;
  bool choose_channel;
} arguments; // arguments is an object of type globalArgs_t

void func(){
  // Default values
  arguments.input_filename = "pic.jpg";
  arguments.verbosity = 0;
  arguments.choose_channel = false;

  //Do more stuff here
}

int main(int argc, char *argv[]){
  func();
  return 1;
}

但这不编译(省略了一些代码):

struct globalArgs_t { //globalArgs_t is the type name
  string input_filename;
  int verbosity;
  bool choose_channel;
} arguments; // arguments is an object of type globalArgs_t;

// Default values
arguments.input_filename = "pic.jpg"; // Line 19
arguments.verbosity = 0;              // Line 20
arguments.choose_channel = false;     // Line 21

void func(){

  //Do more stuff here
}

int main(int argc, char *argv[]){
  func();
  return 1;
}

错误是:

main.cpp:19:3: error: ‘arguments’ does not name a type
main.cpp:20:3: error: ‘arguments’ does not name a type
main.cpp:21:3: error: ‘arguments’ does not name a type

我正在使用g ++和-std = c ++ 0x进行编译,如果这有所不同。

感谢。

2 个答案:

答案 0 :(得分:1)

声明进入功能内部。你不能像在那里那样把它们放在“全球区域”。

这是正确的语法:

struct globalArgs_t { //globalArgs_t is the type name
  string input_filename;
  int verbosity;
  bool choose_channel;
} arguments = {
  "pic.jpg",
  0,
  false
};

这是聚合初始化的一个例子(这个结构是一个聚合)。

不幸的是,C ++不支持C风格的标记初始化,你必须按照结构定义中给出成员的顺序给出成员的值。

答案 1 :(得分:0)

[编辑:我删除了我的整个帖子]

一旦声明了结构的实例,就可以使用constructoraggregate initialization对其进行初始化。