0

我在编译期间收到此错误:

“c:\command_line.h(17): 错误 C2143: 语法错误: 缺少';' 在 '*' 之前注意:C++ 不支持 default-int command_line.h(17):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int"

这是我的代码:

命令行.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;

主程序

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};
4

5 回答 5

1

您使用的构造config.p_symbol_map = {NULL}是静态初始化,仅允许在变量声明中使用。如果你想给你分配一个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; 
 

于 2012-08-10T14:33:40.160 回答
0

你不能那样做。您必须初始化配置 AFAIK。您可以这样做,因为您分配的是指针而不是结构。

config.p_symbol_map = NULL;
于 2012-08-10T14:33:22.930 回答
0

您不是在初始化结构,而是在初始化指向结构的指针。

struct foo {
  int a;
  int b;
};

struct foo bar = {.a = 0, .b = 1};

但是如果你声明一个指向它的指针,那么你一开始就没有内存块来初始化。所以你不能使用{}idiom 来初始化一个指向struct;的指针。

struct foo *bar;
bar = NULL
于 2012-08-10T14:34:30.793 回答
0

那里出了点问题,您正在分配给p_last_symbol您未在 中声明的成员params。此外,p_symbol_map它是一个指向某物的指针,您可以使用它来初始化它,NULL也可以让它指向其他东西(例如使用 分配的内存malloc)。

于 2012-08-10T14:34:38.453 回答
0

There is no need for {} around NULL. Just using NULL or nullptr would do. Further, what is p_symbol_map? There is no such thing in your declaration of params. Also, in line 17, it should be wrtten as:

struct symbol_map* p_symbol_map. This is the reason there is an error on line 17.

Hope this helped.

于 2012-08-10T14:35:57.157 回答