我在 Headers 文件中有以下代码 .
#pragma once
class error_code {
public:
unsigned __int64 hi;
unsigned __int64 lo;
};
std::ostream& operator<< (std::ostream& o, const error_code& e) {
return o << "[" << e.hi << "," << e.lo << "]";
}
我得到链接错误,当项目中有2个cpp包含此头文件时 .
错误LNK2005:“类error_code __cdecl运算符|(类error_code const&,类ViTrox :: error_code const&)”(?? U @@ YA?AVerror_code @ 0 @ ABV10 @ 0 @ Z)已在xxx.obj中定义
我知道如果我将 operator<<
的定义移动到cpp文件或DLL文件,我可以解决这个问题 .
但是,我只想将它们放在 SINGLE 头文件中 . 有没有什么技术可以做到这一点?或者我必须将定义分离到另一个文件?
4 回答
使用
inline
关键字 .使功能
inline
:或使其成为模板功能:
你可以使功能
static
. 它指定内部链接,因此链接器不关心函数是否已在其他转换单元中定义 .或者,正如已经提到的,你可以使它
inline
. 它仍然具有外部链接,但该标准允许外部内联函数在多个翻译单元中具有定义 .在.cpp文件中定义此函数(不在.h文件中)