0

これは私のコードの一部です:

#ifndef INTPROC_OPERATIONS_H
#define INTPROC_OPERATIONS_H

#define MAX_OPERATIONS 256
#define USED_OPERATIONS 8
#define MAX_OPCODE 256
#define OPCODE_TYPE unsigned char

#define OPERANDS_TYPE unsigned char

#include <malloc.h>
#include "executions.h"

typedef struct
{
    OPCODE_TYPE opcode;
    const char * name;
    OPERANDS_TYPE operands_length;
    int (* execute)(char * operands_start, char operands_length);
} OPERATION;

OPERATION * operations[MAX_OPERATIONS];

extern void init_operations();
#define operations_init() init_operations()
extern OPERATION parse_operation(OPCODE_TYPE opcode); //syntax error type

#endif

code.c

#include "code.h"
CODEFILE * create_file()
{
    CODEFILE * ret = (CODEFILE*)malloc(sizeof(CODEFILE));
    ret->actual_instruction = 0; //'actual_instruction' : is not a member of 'CODEFILE'
    ret->length = 0; //'length' : is not a member of 'CODEFILE'
    ret->name = ""; //'name' : is not a member of 'CODEFILE'
    ret->start = 0; /'start' : is not a member of 'CODEFILE'

    return ret;
}

注: code.h はファイル operation.h をインクルードしています。typedef を使用する場合、カスケード インクルードが問題になる可能性がある場所にいくつか乗りました...

質問の見出しに書かれているように、このコードをコンパイルしようとすると、Visual C++ 2010 から 100 エラーが発生します。エラーは、typedef の間違いが原因です。

Error   95  error C2039: 'actual_instruction' : is not a member of 'CODEFILE'
Error   96  error C2039: 'length' : is not a member of 'CODEFILE'
Error   97  error C2039: 'name' : is not a member of 'CODEFILE'
Error   98  error C2039: 'start' : is not a member of 'CODEFILE'
...
Error   6   error C2059: syntax error : 'type'
Error   64  error C2059: syntax error : 'type'
Error   76  error C2059: syntax error : 'type'

この構造を含むヘッダー ファイルは、C ファイルにインクルードされています (他のヘッダーでも使用しています)。次のようなエラーsyntax error : 'type'はインクルード ファイルにあり、その他はインクルード ファイル (メンバーを含む) が含まれているファイルにあります。どこに問題があるか知っている人はいますか?助けてください。

4

1 に答える 1

1

構造体の定義に構文エラーがありCODEFILE、コンパイラがフィールドの名前を解析できないことは間違いありません。次に、これらのフィールドが使用されると、一連のエラーで再び失敗します。

このような場合は、最初のエラーに集中してください。

VS を使用する場合は、[エラー] ウィンドウではなく、[出力] ウィンドウで最初のエラー見つけます。後者は、便宜上エラーを並べ替えることで知られています。

于 2012-09-10T17:32:36.730 に答える