从std :: string继承而没有DLL中的npos问题

时间:2013-08-01 06:58:35

标签: c++ string

很多年前,我犯了错误,继承了DLL中的std :: string,并将一些像“MakeUpper”这样的功能放到字符串中。从VS2008转换到VS2012时会出现npos弹出的问题。使用microsoft *的解决方法我得到了一些其他DLL工作,但没有使用后期绑定并且没有DLLMain()函数的DLL。

* Microsoft Workaround

#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类不起作用,因为它在其他几个DLL中使用,其中MyString和字符串函数混合很多,也在函数参数中。例如:

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

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

0 个答案:

没有答案