gpt4 book ai didi

c++ - ostream 运算符重载的链接器错误 (VC++ 2013)

转载 作者:行者123 更新时间:2023-11-28 05:41:29 25 4
gpt4 key购买 nike

我有一个 <<在编译良好的 (VC++ 2013) DLL 中定义的运算符重载:

定义:

__declspec(dllexport)  friend std::ostream& operator<< (std::ostream& os, const ComplexMessage& rhs);

实现:

std::ostream& operator<< (std::ostream& os, const ComplexMessage& rhs)
{
os << rhs.toString();
return(os);
}

dll 包含另外 50 个方法,包括多个运算符重载,可以正常编译和链接。

但是,使用dll的程序无法链接<<的方法。

它声明了 <<重载为

__declspec(dllimport) std::ostream& operator<< (std::ostream& os, const ComplexMessage& rhs);

代码编译正常。但它不会链接:

error LNK2001: unresolved external symbol "__declspec(dllimport) class std::basic_ostream > & __cdecl messaging::operator<<(class std::basic_ostream > &,class messaging::ComplexMessage const &)"

所有其他 DLL 方法链接正常。有谁知道为什么会出现此链接器错误?

编辑这与提议的重复问题不同。符号在 DLL 的代码中定义并按语法编译;但是,它没有链接。这向我表明,要么未生成该特定 operator<< 重载的代码,要么正在生成但未正确找到。我确信这很简单,但我一直在努力解决这个问题。

最佳答案

感谢上面的输入,确定解决方案是在实现(而不是定义)中明确指定命名空间:

std::ostream& messaging::operator<< (std::ostream& os, const ComplexMessage& rhs);

请注意,“使用命名空间消息传递”子句没有任何效果;链接器要求在实现声明中明确指定。

关于c++ - ostream 运算符重载的链接器错误 (VC++ 2013),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com