我有以下代码放在一个头文件中。
#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 << "]";
}
当项目中有两个 cpp 文件包含此头文件时,我会出现链接错误。
错误 LNK2005:“class error_code __cdecl operator|(class error_code const &,class ViTrox::error_code const &)”(??U@@YA?AVerror_code@0@ABV10@0@Z)已在 xxx.obj 中定义
我知道如果将 operator<<
的定义移动到 cpp 文件或 DLL 文件中,可以解决这个问题。
然而,我只想把它们放在一个单一的头文件中。是否有任何技术可以实现这一点?还是必须将定义分开到另一个文件中?