gpt4 book ai didi

c++ - 具有仅 header 实现的重复符号

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:03 26 4
gpt4 key购买 nike

<分区>

我有一个在头文件中声明和实现的 C++ 类。我选择这个是因为由于 _GLIBCXX_DEBUG 和预编译库,人们不能轻易地在调试和发布版本之间移动。例如,如果我定义 _GLIBCXX_DEBUG,Boost 将由于源文件中的 ABI 更改而崩溃。

仅 header 的实现产生了重复符号的问题。例如,在下面的类中 operator== 和非成员 swap 将产生多个定义的符号。

// Foo.hpp
namespace Bar
{
template
class Foo
{
...
};

bool operator==(const Foo& a, const Foo& b) {
..
}
}

namespace std
{
template <>
void swap(Bar::Foo& a, Bar::Foo& b)
{
a.swap(b);
}
}

当声明和实现分离时,文件(Foo.hpp 和 Foo.cpp)编译和链接正常。

正确编译和链接的诀窍是什么?

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