2

很多年前,我犯了一个错误,即从 DLL 中的 std::string 继承并将一些诸如“MakeUpper”之类的功能添加到字符串中。从 VS2008 转换到 VS2012 会弹出 npos 的问题。通过 microsoft * 的解决方法,我得到了一些其他 DLL 工作,但不是用于后期绑定且没有 DLLMain() 函数的 DLL。

*微软解决方法

#if _MSC_VER >= 1600
#include <string>
const std::basic_string<char>::size_type std::basic_string<char>::npos =   (std::basic_string<char>::size_type) -1;
#endif

该类在 DLL 中声明,如下所示:

class  MYDLL_API CNyString  : public std::string

错误行是这样的:

error LNK2001: unresolved external symbol "public: static unsigned int const std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::npos" (?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB)

用 std::string 作为属性重写 MyString 类不起作用,因为它用于 MyString 和字符串函数混合很多的其他几个 DLL 中,也在函数参数中。例子:

 void Foo(const CMyString &Param_) ..
 ...
 Foo(std::string("Hallo World")..

有谁知道如何解决这个问题?提前致谢。

4

0 回答 0