我在Windows中收到以下错误。
我有一个库L1,它具有以下头文件及其实现
namespace TC
{
namespace VT
{
enum Value
{
INVALID = 0,
Light = 1
};
std::ostream& operator<<(std::ostream& os, Value value);
}
}
还有另一个库L2,它使用运算符<<。代码编译器很好,但是会导致无法解决的外部符号错误。这意味着在链接时没有找到操作符<<。
L2库中的代码。
bool Mock::Test(
TC::VT::Value venue )
{
string func(__func__);
cout << func
<< "venue = "
<< venue
<< endl;
return false;
}
cout行是导致问题的原因之一。
MockClient.obj:错误LNK2019:未解析的外部符号“类std::basic_ostream>&__cdecl TC::VT::operator <<(类std::basic_ostream>&enum TC::VT::Value)”
最佳答案
这里发生三件事之一。您没有链接到包含运算符定义的目标文件,或者没有为运算符提供定义,或者没有正确定义运算符。由于您已声明目标文件已链接,因此应确保对操作符的定义正确。您的定义应如下所示
std::ostream& TC::VT::operator<<(std::ostream& os, Value value)
{
// ... your code here
return os;
}
或者应该将其包装在 namespace 中
namespace TC
{
namespace VT
{
std::ostream& TC::VT::operator<<(std::ostream& os, Value value)
{
// ... your code here
return os;
}
}
}
关于c++ - 错误: LINK2019: unresolved external symbol when using operator << in a namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956571/