C++ 在编写Dll时需要导出类给外部调用,如果在导出类中出现std::string或其他STL类型,通常会爆出下面的warning
简单的导出类定义如下:
class __declspec(dllexport) TestDll
{
public:
TestDll(const char* data);
~TestDll();
void test();
private:
std::string m_str;
};
编译,出现下面警告:
warning C4251: “TestDll::m_str”: class“std::basic_string<char,std::char_traits<char>,std::allocator<char>>”需要有 dll 接口由 class“TestDll”的客户端使用
在定义导出类前先声明导出对应的模板类型:
template class __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char>>;
不过,如果有其他导出类也有同样的声明的话,会出现重复定义的问题。