【问题标题】:Error: LINK2019: unresolved external symbol when using operator << in a namespace错误:LNK2019:在命名空间中使用运算符 << 时无法解析的外部符号
【发布时间】:2014-01-24 05:55:20
【问题描述】:

我在 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: 无法解析的外部符号“class std::basic_ostream > & __cdecl TC::VT::operator &,enum TC::VT::Value)”

【问题讨论】:

  • 好吧,定义在哪里?错误是什么?你的testcase 是什么样的? 2年3个月,你现在应该知道怎么提问了! :)
  • 这看起来像是库 L2 没有链接到库 L1 的简单案例
  • 链接器找不到std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Value value);的定义
  • @AdityaKumar 不,它搜索不同的功能。
  • 你在哪里定义函数std::ostream&amp; TC::VT::operator&lt;&lt;(class std::basic_ostream &gt; &amp;,enum TC::VT::Value)

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


【解决方案1】:

这里正在发生三件事之一。要么您没有链接到包含运算符定义的目标文件,要么您没有为运算符提供定义,要么没有正确定义运算符。由于您已经声明正在链接目标文件,因此您应该确保您对运算符的定义是正确的。您的定义应如下所示

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

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2013-06-15
    • 2015-01-18
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多