我正在努力分解存在于两个文件中的工作代码(main.cpp和header.h->main.cpp、functions.cpp和header.h(
我的问题似乎完全围绕着这个结构和我对*root指针的使用:
struct avl_node
{
int data;
struct avl_node* left;
struct avl_node* right;
}*root;
当我的代码只在两个文件(main.cpp和header.h(中时,代码运行良好,当我将函数的定义拆分为functions.cpp时,LNK1169错误开始出现。
我是不是误解了事情应该如何运作?
在标题中:
struct avl_node
{
int data;
avl_node* left;
avl_node* right;
};
extern avl_node* root;
在一个源文件中:
#include "ThatHeader.h"
avl_node* root;
当前,您已将root
的定义放入标头中。这意味着每个包含此标头的源文件最终都包含该定义。当这些文件链接在一起时,链接器会发现同一名称的多个定义,并进行投诉。
解决方案是在头文件中只提供一个声明(extern
关键字就是这样做的(,并且只在一个源文件中提供一个定义。
另请参阅:一个定义规则