1

我遇到了一些 C 代码似乎很常见的问题:将一个结构分配给另一个结构,编译器不知道该结构的类型是什么。我已经尝试在各处放置各种类型定义和结构,但仍然无法编译该血腥的东西,现在可以再看到树木的树林,请帮助。

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 更新 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中的name不同。typedef 帮助您创建一个短名称而不是前向声明。您对 typdef 和 struct decleration 使用相同的名称。

 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 回答