我在编译期间收到此错误:
“c:\ command_line.h(17):错误C2143:语法错误:缺少';'在'*'之前 注意:C ++不支持default-int command_line.h(17):错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int“
这是我的代码:
typedef struct symbol
{
char* sym_type;
unsigned short address;
}symbol;
typedef struct symbol_map
{
char** p_arr_keys;
symbol* p_arr_values;
int item_count;
int array_mode;
int copy_keys;
}symbol_map;
typedef struct params
{
int data_counter;
int code_counter;
int line_counter;
int command_len;
int error_counter;
int warning_counter;
symbol_map* p_symbol_map; // (This is line 17- from the error msg)
char* p_last_symbol
}params;
params config;
config.code_counter = 0;
config.data_counter = 0;
config.line_counter = 0;
config.command_len = 0;
config.command_first_char = EMPTY;
config.error_counter = 0;
config.warning_counter = 0;
config.p_last_symbol = NULL;
config.p_symbol_map = {NULL}; // (This is line 17- from the error msg)
知道这个初始化有什么问题吗?
config.p_symbol_map = {NULL};
答案 0 :(得分:1)
您使用config.p_symbol_map = {NULL}
的构造是静态初始化,只允许在变量声明中使用。如果要为p_symbol_map
分配NULL,则只需config.p_symbol_map = NULL
。
应用于symbol
结构的静态初始化的有效情况如下:
symbol sym = {
NULL,
0x42
};
<强>更新强>
顺便说一下,在结构定义中char* p_last_symbol
之后你缺少一个分号。
typedef struct params
{
int data_counter;
int
int line_counter;
int command_len;
int error_counter;
int warning_counter;
symbol_map* p_symbol_map; // (This is line 17- from the error msg)
char* p_last_symbol <----- need to add ; here
}params;
答案 1 :(得分:0)
你不能那样做。您必须初始化配置AFAIK。您可以这样做,因为您要分配指针而不是结构。
config.p_symbol_map = NULL;
答案 2 :(得分:0)
您没有初始化结构,而是初始化指向结构的指针。
struct foo {
int a;
int b;
};
struct foo bar = {.a = 0, .b = 1};
但是如果你要声明一个指针,那么你最初没有内存块来初始化。因此,您无法使用{}
惯用法初始化指向struct
的指针;
struct foo *bar;
bar = NULL
答案 3 :(得分:0)
那里有些错误,您正在分配给p_last_symbol
成员,而您未在params
中声明。此外,p_symbol_map
是指向某个内容的指针,您可以使用NULL
对其进行初始化,也可以指向其他内容(例如使用malloc
分配的内存)。
答案 4 :(得分:0)
{}
周围NULL
不需要NULL
。只需使用nullptr
或p_symbol_map
即可。那么struct symbol_map* p_symbol_map
是什么?你的params声明中没有这样的东西。
此外,在第17行,它应该被视为:
{{1}}。这就是第17行出现错误的原因。
希望这会有所帮助。