C++ Dll导出类中暴露std::string 等类型时爆出“warning C4251”警告的处理

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>>;

不过,如果有其他导出类也有同样的声明的话,会出现重复定义的问题。

猜你喜欢

转载自blog.csdn.net/hsshh1988/article/details/80613576
今日推荐