1

構造体を別の構造体に代入すると、コンパイラーが構造体の型を認識しないという、一部の C コードでよく見られる問題が発生しています。さまざまな typedef と構造体をいたるところに配置しようとしましたが、まだ血まみれのものをコンパイルすることができず、今では木の森を見ることができなくなりました。助けてください。

typedef struct Option Option; //fwd decl
typedef struct OptionsList OptionsList;
typedef struct OptionsList {
    struct Option* Option;     
    struct OptionsList* Next; // presumably this is anonymous
} OptionsList;

typedef struct Option {
    CHARPTR Name;
    CHARPTR Value;
    struct OptionList* children;
} Option;

struct OptionsList* OptionsList_Create(Option* Option);

struct Option* Options_Create(CHARPTR Name, CHARPTR Value) {
    struct Option* option = (struct Option*) malloc(sizeof(struct Option));
    **option->children = OptionsList_Create(NULL);** // <- ARRRRRGGGGGHHHHHH!!!!!!!
    return option;
}

警告は次の行から来ています:

option->children = OptionsList_Create(NULL);

そして警告は

警告 C4133: '=': 互換性のない型 - 'OptionsList *' から 'OptionList *' へ

Vs2012 update 2012 - プロジェクトは C (/TC) としてコンパイルされています

どうもありがとう。

4

2 に答える 2

1

エラーを参照してください。

incompatible types - from from 'OptionsList *' 
                            to 'OptionList *'

したがって、Option構造では:

struct OptionList* children;

次のようにする必要があります。

struct OptionsList* children;
-------------^---------------
于 2013-08-19T14:50:05.863 に答える
0

以下がコンパイルされます。typedef と struct deceleration 内の名前は別のものにしてください。typedef は、前方宣言しない短い名前を作成するのに役立ちます。typdef と struct 宣言に同じ名前を使用しています。

 struct OptionsList;// forward declare
typedef struct SOption {
    CHARPTR Name;
    CHARPTR Value;
    struct OptionsList* children;
} Option;

typedef struct OptionsList {
    Option* Option;     
    struct OptionsList* Next; // presumably this is anonymous
 } OptionList;

 OptionList* OptionsList_Create(Option* Option);

 Option* Options_Create(CHARPTR Name, CHARPTR Value) {
      Option* option = (Option*) malloc(sizeof(struct Option));
      option->children = OptionsList_Create(NULL);** // <- ARRRRRGGGGGHHHHHH!!!!!!!
      return option;
 }
于 2013-08-19T15:06:14.313 に答える