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

C++ 发现多重定义符号的问题(LNK 1169),c++,function,pointers,struct,linked-list,C++,Function,Pointers,Struct,Linked List,我正在努力分解存在于两个文件中的工作代码(main.cpp和header.h->main.cpp、functions.cpp和header.h) 我的问题似乎完全围绕这个结构和我对*根指针的使用: struct avl_node { int data; struct avl_node* left; struct avl_node* right; }*root; 当我的代码位于两个文件(main.cpp和header.h)中时,代码运行正常,当我将函数的定义拆分为func

我正在努力分解存在于两个文件中的工作代码(main.cpp和header.h->main.cpp、functions.cpp和header.h)

我的问题似乎完全围绕这个结构和我对*根指针的使用:

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
关键字所做的),并且只在一个源文件中提供一个定义


另请参见:

显示完整的代码示例(如果是这样的话,可以拆分为文件)提供了大量获取帮助的信息。噢,哇,非常感谢!我真的很感谢你的帮助!