我在Windows中收到以下错误。
我有一个库L1,它有以下头文件及其实现
namespace TC
{
namespace VT
{
enum Value
{
INVALID = 0,
Light = 1
};
std::ostream& operator<<(std::ostream& os, Value value);
}
}
还有另一个库L2使用运算符&lt;&lt;代码编译器很好,但导致未解决的外部符号错误。这意味着运营商&lt;&lt;没有位于链接时间。
图书馆L2中的代码。
bool Mock::Test(
TC::VT::Value venue )
{
string func(__func__);
cout << func
<< "venue = "
<< venue
<< endl;
return false;
}
cout line是造成问题的那一行。
MockClient.obj:错误LNK2019:未解析的外部符号“class std :: basic_ostream&gt;&amp; __cdecl TC :: VT :: operator&lt;&lt;(class std :: basic_ostream&gt;&amp;,enum TC :: VT ::值)“
答案 0 :(得分:0)
这里发生了三件事之一。要么您没有链接到包含运算符定义的目标文件,您没有为运算符提供定义,或者未正确定义运算符。由于您已声明目标文件已链接,因此应确保您对运算符的定义正确。您的定义应如下所示
std::ostream& TC::VT::operator<<(std::ostream& os, Value value)
{
// ... your code here
return os;
}
或者它应该包装在命名空间
中namespace TC
{
namespace VT
{
std::ostream& TC::VT::operator<<(std::ostream& os, Value value)
{
// ... your code here
return os;
}
}
}