gpt4 book ai didi

C 错误 : dereferencing pointer to incomplete type

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:16 34 4
gpt4 key购买 nike

所以我在运行时收到“第 51 行:错误:取消引用指向不完整类型的指针”:

int main(void)
{
Tree * testTree;

testADT * data1;

testTree = createTree(compare,destroy);

data1 = malloc(sizeof(testADT));

data1->val = 10;

/* Line 51 */ addToTree(testTree,testTree->root,data1);

destroyBinTree(testTree);

return(0);
}

我的 addToTreeFunction:

TreeNode * addToTree(Tree * theTree,TreeNode * theTreeNode, TreeDataTypePtr data)
{
TreeNode * newNode;
if(isEmpty(theTree))
{
newNode = malloc(sizeof(TreeNode));
newNode->height = 0;
newNode->data = data;

theTree->root = newNode;
return theTree->root;
}else{
if(theTree->compare(theTreeNode->data,data) == 1) /* shows root data is smaller */
{
theTreeNode->right = addToTree(theTree,theTreeNode->right,data);
}else
if(theTree->compare(theTreeNode->data,data) == 0) /* shows root data is larger */
{
theTreeNode->left = addToTree(theTree,theTreeNode->left,data);
}
}
return theTreeNode;
}

我的类型定义和结构:

struct tADT{
int val;
};

typedef struct tADT testADT;

typedef void * TreeDataTypePtr;

任何人都可以提供一些关于发生了什么的见解吗?提前致谢!

编辑:这是在我的模块 (.c) 中

struct AvlNode{
void * data;
struct AvlNode * left;
struct AvlNode * right;
int height;
};


struct AvlTree{
int (*compare) (TreeDataTypePtr data1, TreeDataTypePtr data2);
void (*destroy) (TreeDataTypePtr data);
struct AvlNode * root;
};

这是在标题 (.h) 中

struct AvlTreeNode;
struct AvlTree;

typedef struct AvlTree Tree;
typedef struct AvlNode TreeNode;
typedef void * TreeDataTypePtr;

通过在 header 中定义所有结构/类型定义来解决问题:

typedef struct AvlTree Tree;
typedef struct AvlNode TreeNode;
typedef void * TreeDataTypePtr;

struct AvlNode{
void * data;
struct AvlNode * left;
struct AvlNode * right;
int height;
};


struct AvlTree{
int (*compare) (TreeDataTypePtr data1, TreeDataTypePtr data2);
void (*destroy) (TreeDataTypePtr data);
struct AvlNode * root;
};

最佳答案

您是否在某个头文件中的某处定义了“Tree”?失败模块的第 51 行能否看到该 header ?

你必须定义“树”:)

===================== 附录 ====================

感谢您用树的“定义”更新您的帖子:

// .h file
struct AvlTreeNode;
struct AvlTree;
typedef struct AvlTree Tree;
...

但事实仍然存在——它们都是“不完整的类型”。

您说您“在模块 (.c) 中”定义了 AvlTree 和 AvlTreeNode。

问:哪个 .c 翻译单元?

问:您尝试使用它之前,它是否已在该翻译单元中定义?

问:是否在任何其他翻译单元中使用?

问:为什么会有重复/冗余/令人困惑的 typedef 别名?

问:看在老天的份上,为什么不直接在 .h 文件中定义它?

关于C 错误 : dereferencing pointer to incomplete type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598094/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com