我刚刚重新组织了我的Visual C ++(7.1)项目的一些库,并且遇到了我无法解决的链接器的问题。
项目链接MFC以及标准Windows库,所有MBCS
在某个地方,有类似的东西:
std :: stringstream sstr; sstr<< m_MyCStringVar<<的std :: ENDL;
(这一行以及其他一些需要<< for basic_stream和CString)
一切都很好,直到我将其他2个库合并为1个库(只是将代码/文件从a移动到b而不会发生太大变化)
突然间,我的所有exe都会产生链接器错误:
BasicFunctionsD.lib(CAccess.obj):错误LNK2019:未解析的外部符号“class std :: basic_ostream>& __cdecl operator<<(class std :: basic_ostream>&,class ATL :: CStringT> ;> const&)“(?? 6 @ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ std @@ AAV01 @ ABV?$ CStringT @ DV?$ StrTraitMFC_DLL @ DV?$ ChTraitsCRT @ D @ATL @@@@@ ATL @@@ Z)在函数“protected:void __thiscall CAccessor :: CreateCategory(int,char const *,char const *)”中引用(?CreateCategory @ CAccessor @@ IAEXHPBD0 @ Z)
(上面的代码没有受到库合并的影响,至少不是直接影响)
据我所知,<<找不到基本ostream和CString的运算符。
可能找不到包含MFC版本的basic_ostream的lib?
但我不知道如何解决它,甚至不知道从哪里开始寻找真正的问题。
任何提示都会很好
答案 0 :(得分:3)
参数...
简单的原因:CString没有std :: ostream运算符......这是我自己的代码,我只是不记得...... :( 在清理期间,该函数进入命名空间并丢失
D'哦!
namesspace StupidcleanupIshouldNotHavedone { std :: ostream& operator<<(std :: ostream& s,const CString& str) { s<< (LPCTSTR)STR; 回归; } }
答案 1 :(得分:1)
我可能错了,但我确实遇到了未解决的链接问题。解决方案准备就绪...... #include <string>
。原来其中一个头定义了字符串,我能够正常使用字符串并编译没有问题。但是没有静态实现,因为我忘记了标题,所以也许你错过了。