0

コンパイル中に次のエラーが発生します。

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

p_last_symbolで宣言していないメンバーに割り当てていますparams。また、p_symbol_mapは何かへのポインタです。 で初期化するか、NULL別のもの ( で割り当てられたメモリなどmalloc) を指すようにすることができます。

于 2012-08-10T14:34:38.453 に答える
0

構造体を初期化しているのではなく、構造体へのポインターを初期化しています。

struct foo {
  int a;
  int b;
};

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

しかし、それへのポインタを宣言している場合は、最初に初期化するメモリ ブロックがありません。{}したがって、イディオムを使用してポインターを初期化することはできませんstruct

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

{}aroundは必要ありませんNULL。単に使用するNULLか、nullptrそうするでしょう。さらに、 とはp_symbol_map?paramsの宣言にはそのようなものはありません。また、17 行目では、次のように記述します。

struct symbol_map* p_symbol_map. これが、17 行目にエラーがある理由です。

これが役に立ったことを願っています。

于 2012-08-10T14:35:57.157 に答える
0

あなたはそのようにすることはできません。構成AFAIKを初期化する必要があります。構造体ではなくポインターを割り当てているため、これを行うことができます。

config.p_symbol_map = NULL;
于 2012-08-10T14:33:22.930 に答える