gpt4 book ai didi

c++ - 试图理解 C++ : Duplicate symbols for architecture x86_64

转载 作者:行者123 更新时间:2023-11-30 01:44:09 25 4
gpt4 key购买 nike

以下是导致此链接器错误的文件(仅显示文件、命名空间和类名):

// PubSub.hpp:
#ifndef PubSub_hpp
#define PubSub_hpp
namespace PubSub {
class Publisher {}
}
}
#endif

// Client.hpp:
#ifndef Client_hpp
#define Client_hpp
#include "PubSub.hpp"
class Client {
}
#endif

// Scene.hpp:
#ifndef Scene_hpp
#define Scene_hpp
#include "Client.hpp"
class Scene {
}
#endif

代码在此状态下编译无误。但是,只要我在命名空间 PubSub 下的 PubSub.hpp 中引入一个变量,如下所示:

// PubSub.hpp:
#ifndef PubSub_hpp
#define PubSub_hpp
namespace PubSub {
class Publisher {}
}
Publisher NetworkEventPublisher("someName");
}
#endif

我在标题中收到链接器错误。我可以找到解决方法,但我正在尝试学习 C++,所以我想问一下导致这种情况的规则是什么?

最佳答案

But as soon as I introduce a variable in PubSub.hpp

如果您在多个翻译单元(.cpp 文件)中包含一个 PubSub.hpp,那么您的 NetworkEventPublisher 将被定义不止一次,这就是链接器所提示的。

解决办法是移动:

Publisher NetworkEventPublisher("someName");

到实现文件(即 PubSub.cpp)。如果你想让其他翻译单位看到它,那么在 PubSub.hpp 中添加 extern 声明:extern Publisher NetworkEventPublisher;

关于c++ - 试图理解 C++ : Duplicate symbols for architecture x86_64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com