我正在尝试定义一个简单的结构,拥有该结构类型的单个对象,并初始化该对象的成员。当我全局定义结构和对象并初始化函数内的成员时,它会编译并正确运行。当我在定义结构和对象后立即尝试初始化成员时,出现编译错误。或者至少这是我认为我正在做的事情,错误表明我在某处遗漏了某些东西。
这有效(省略了一些代码):
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进行编译,如果这有所不同。
感谢。
答案 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)
[编辑:我删除了我的整个帖子]
一旦声明了结构的实例,就可以使用constructor或aggregate initialization对其进行初始化。