如何解决Operator <<重载的声明无法识别其定义
我具有以下结构:
// [String.h]
namespace ns {
class String {
std::wstring m_string;
public:
const wchar_t* ToCString() const;
friend ::std::ostream& operator<<(::std::ostream& os,const String& stringObject);
// ...
};
}
// [String.cpp]
std::ostream& operator<<(std::ostream& os,const ns::String& stringObject) {
std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> conv;
os << conv.to_bytes(stringObject.ToCString());
return os;
}
发生以下错误:error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl ns::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class ns::String const &)" (??6ns@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV12@ABVString@0@@Z) referenced in function _main
我知道使用这种方式namespace ns {}
可以正常工作,但是除了以前的方式之外,还有其他方法吗,因为这种方式ns::method
不适合使用friend方法吗?
解决方法
在命名空间operator<<
中编写ns
的实现。已在VS2019中成功编译。
// implementation in .cpp file.
namespace ns
{
std::ostream& operator<<(std::ostream& os,const ns::String& stringObject)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> conv;
os << conv.to_bytes(stringObject.ToCString());
return os;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。