簡體   English   中英

在C上初始化結構問題

[英]Initialize structs issues on C

在編譯過程中出現此錯誤:

“ c:\\ command_line.h(17):錯誤C2143:語法錯誤:缺少';' 在“ *”之前注意:C ++不支持default-int command_line.h(17):錯誤C4430:缺少類型說明符-假定為int。注意:C ++不支持default-int”

這是我的代碼:

command_line.h

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;

main.c

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 僅使用NULLnullptr 此外, p_symbol_mapp_symbol_map 您聲明的參數中沒有這樣的東西。 另外,在第17行中,它應該寫為:

struct symbol_map* p_symbol_map 這就是第17行出現錯誤的原因。

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM