【问题标题】:Problems with multiply defined symbols found (LNK 1169) [duplicate]发现多重定义符号的问题(LNK 1169)[重复]
【发布时间】:2020-10-10 18:09:38
【问题描述】:

我正在努力分解存在于 2 个文件(A main.cpp 和 header.h -> A 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 错误开始出现。

我是否误解了事情应该如何运作?

【问题讨论】:

  • 显示完整的代码示例(如果是这种情况,则拆分为文件)为获得帮助提供了很多信息。

标签: c++ function pointers struct linked-list


【解决方案1】:

在标题中:

struct avl_node
{
    int data;
    avl_node* left;
    avl_node* right;
};
extern avl_node* root;

仅在一个源文件中:

#include "ThatHeader.h"
avl_node* root;

目前,您将root 的定义放入标题中。这意味着包含此标头的每个源文件最终都包含该定义。当这些文件链接在一起时,链接器会发现同名的多个定义,然后报错。

解决方案是只在头文件中提供一个声明(这就是extern 关键字所做的),并且只在一个源文件中提供一个定义。

另请参阅:One Definition Rule

【讨论】:

  • 哇,非常感谢!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多