[英]Initialize structs issues on C
在編譯過程中出現此錯誤:
“ 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};
您已使用config.p_symbol_map = {NULL}
的構造是靜態初始化,並且僅在變量聲明中允許使用。 如果要為p_symbol_map
分配NULL, p_symbol_map
可以簡單地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;
你不能那樣做。 您必須初始化配置AFAIK。 您可以執行此操作,因為您要分配的是指針而不是結構。
config.p_symbol_map = NULL;
您不是在初始化結構,而是在初始化指向結構的指針。
struct foo {
int a;
int b;
};
struct foo bar = {.a = 0, .b = 1};
但是,如果要聲明一個指向它的指針,則首先沒有要初始化的內存塊。 因此,您不能使用{}
慣用語來初始化指向struct
的指針;
struct foo *bar;
bar = NULL
那里出了點問題,您正在分配未在params
聲明的p_last_symbol
成員。 同樣, p_symbol_map
是指向p_symbol_map
對象的指針,您可以使用NULL
進行初始化,也可以使其指向其他對象(例如,使用malloc
分配的malloc
)。
不需要{}
圍繞NULL
。 僅使用NULL
或nullptr
。 此外, p_symbol_map
是p_symbol_map
? 您聲明的參數中沒有這樣的東西。 另外,在第17行中,它應該寫為:
struct symbol_map* p_symbol_map
。 這就是第17行出現錯誤的原因。
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.