错误:LNK2019:使用运算符<<时未解析的外部符号在命名空间中

时间:2014-01-06 18:19:22

标签: c++ compiler-errors linker-errors

我在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 ::值)“

1 个答案:

答案 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;
        }
    }
}