在Microsoft Visual C ++ 2015中编译DLL - 警告C4251需要让dll接口供类的客户端使用 - 使用Boost时?

时间:2016-11-09 16:31:59

标签: c++ visual-c++ boost dll

所以,我正在尝试为我的大型项目编译DLL。这个想法是它有几个部分。一种类型的库,它被编译成DLL,以及DLL链接到的应用程序。我一直收到以下警告:

warning C4251: 'plf::lfInvalidIndexExcpt::message': class 'boost::container::basic_string<char,std::char_traits<char>,boost::container::new_allocator<char>>' needs to have dll-interface to be used by clients of class 'plf::lfInvalidIndexExcpt'

这是给我带来麻烦的代码。

我的DLL导出/导入宏定义如下:

#ifdef LF_ENGINE_EXPORTS  
#define LFE_API __declspec(dllexport)   
#else  
#define LFE_API __declspec(dllimport)   
#endif  

现在,我在我的中使用了boost,并且我有以下内容:

typedef boost::container::string lfString;

类lfInvalidIndexExcpt的定义如下:

namespace plf
{
    class LFE_API lfInvalidIndexExcpt
    {
    public:

        explicit lfInvalidIndexExcpt(lfSize idx);

        lfInvalidIndexExcpt(lfSize idx, const lfString& descr);

        const char* what() const throw();

    private:

        lfString message;

        void makeMessage(lfSize idx, const lfString& descr);

    };
};

我应该提一下,lfSize只是std :: size_t的typedef。

我想知道这个警告实际意味着什么,如果我可以在我的DLL中使用像这样的Boost,如果有的话。另外,如果这不是使用Boost的正确方法是什么?

谢谢,

-Zack Frost

1 个答案:

答案 0 :(得分:0)

所以,我似乎通过玩弄我的代码和窥探StackOverflow找到了我自己问题的解决方案!我似乎只需要从类声明中删除DLL导出宏并将其添加到成员函数中。它现在似乎编译和工作正常!

解决方案来自此StackOverflow帖子(通过 frast 回答):std::vector needs to have dll-interface to be used by clients of class 'X warning