结构在c中没有字段错误消息
Struct doesn't have a field error message in c
我正在尝试编写一个二叉搜索树,但是我的 Clion IDE 在不同的地方给我这个错误:Struct TreeNode doesn't have a field 'balance'
。
我选择 'balance' 作为示例,但这发生在结构中的每个字段上。
我的整个头文件如下:
#define CARD_SIZE 15
typedef struct TreeNode *node_ptr;
typedef struct TreeNode{
char card[CARD_SIZE];
int balance;
node_ptr left;
node_ptr right;
node_ptr parent;
}Node;
错误发生的例子是:
bool updateSearch(int balance, char *card) {
node_ptr node = searchNode(card,tree.root);
if(node){
node->balance += balance; //Right here
return true;
}
return false;
}
可能是什么导致了这个问题?
根据评论,我们似乎已经诊断出问题,@joneleam 确认解决方法有效。
这不是编译错误,而是静态分析器的限制。在代码片段中,node_ptr
的定义为 struct TreeNode*
在 struct TreeNode
的定义之前。因此,当编译器看到该声明时,它所知道的只是 TreeNode
是某种 struct
,甚至不一定在同一个翻译单元中定义。当它紧接着看到 struct TreeNode
的定义时,它无法将其与 node_ptr
的定义统一为 struct TreeNode*
。因此,它不知道 struct TreeNode
的 node_ptr
成员指向什么,即使它指向另一个 TreeNode
!
解决方法是重构为:
#define CARD_SIZE 15
typedef struct TreeNode{
char card[CARD_SIZE];
int balance;
struct TreeNode* left;
struct TreeNode* right;
struct TreeNode* parent;
}Node;
typedef struct TreeNode *node_ptr;
你 也可以 从技术上讲,#define NODE_PTR struct TreeNode*
如果把它写出来对你来说太丑陋了代码,但对我来说那更像是代码的味道。除非开发人员添加对像您这样的正确代码的支持,或者有更好的解决方法,否则 trade-off 您想要做什么完全取决于您。
我正在尝试编写一个二叉搜索树,但是我的 Clion IDE 在不同的地方给我这个错误:Struct TreeNode doesn't have a field 'balance'
。
我选择 'balance' 作为示例,但这发生在结构中的每个字段上。
我的整个头文件如下:
#define CARD_SIZE 15
typedef struct TreeNode *node_ptr;
typedef struct TreeNode{
char card[CARD_SIZE];
int balance;
node_ptr left;
node_ptr right;
node_ptr parent;
}Node;
错误发生的例子是:
bool updateSearch(int balance, char *card) {
node_ptr node = searchNode(card,tree.root);
if(node){
node->balance += balance; //Right here
return true;
}
return false;
}
可能是什么导致了这个问题?
根据评论,我们似乎已经诊断出问题,@joneleam 确认解决方法有效。
这不是编译错误,而是静态分析器的限制。在代码片段中,node_ptr
的定义为 struct TreeNode*
在 struct TreeNode
的定义之前。因此,当编译器看到该声明时,它所知道的只是 TreeNode
是某种 struct
,甚至不一定在同一个翻译单元中定义。当它紧接着看到 struct TreeNode
的定义时,它无法将其与 node_ptr
的定义统一为 struct TreeNode*
。因此,它不知道 struct TreeNode
的 node_ptr
成员指向什么,即使它指向另一个 TreeNode
!
解决方法是重构为:
#define CARD_SIZE 15
typedef struct TreeNode{
char card[CARD_SIZE];
int balance;
struct TreeNode* left;
struct TreeNode* right;
struct TreeNode* parent;
}Node;
typedef struct TreeNode *node_ptr;
你 也可以 从技术上讲,#define NODE_PTR struct TreeNode*
如果把它写出来对你来说太丑陋了代码,但对我来说那更像是代码的味道。除非开发人员添加对像您这样的正确代码的支持,或者有更好的解决方法,否则 trade-off 您想要做什么完全取决于您。