发现多重定义符号的问题(LNK 1169)



我正在努力分解存在于两个文件中的工作代码(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关键字就是这样做的(,并且只在一个源文件中提供一个定义。

另请参阅:一个定义规则

相关内容

  • 没有找到相关文章

最新更新