警告 C4251:需要具有 DLL 接口才能被类的客户端使用

8
这是我的第一篇帖子。
我正在创建一个DLL并在应用程序的主文件中调用它。代码编译正常,但我收到以下错误消息:
Possible Duplicate: std::vector需要有dll-interface才能被类“X ”的客户端使用警告
 warning C4251: 'PNCBaseClass::m_vAvailChannelsFromRx' : class 'std::vector<_Ty>' needs to have dll-interface to be used by clients of class 'PNCBaseClass'
3>          with
3>          [
3>              _Ty=int
3>          ]

我的代码如下:

#define TEST_API __declspec(dllexport)
class TEST_API PNCBaseClass
{
public:
vector<int> m_vAvailChannelsFromRx
};

我已经查找了解决方案并尝试但失败了。

我不想禁用警告。


还有这个 - https://dev59.com/EnRA5IYBdhLWcg3w9izq - Luchian Grigore
我很惊讶这些没有被提出来作为建议... - Luchian Grigore
请返回已翻译的文本。 - Mohammad
1个回答

13

永远不要将STL容器作为导出的类成员。客户端应用程序可能会与您的不同STL版本一起编译,这会导致未定义的运行时行为。 在您的情况下,很容易使用指针vector<int>*替换vector<int>成员。在类构造函数中初始化它,并在类析构函数中释放。


谢谢Alex。我不是编程专家。我尝试了你说的,但我仍然收到警告。所以在构造函数中,我做了m_vAvailChannelsFromRx.push_back(0),在析构函数中,我只清除了变量。 - chintan s
好的,我在构造函数中做了以下操作:y = new std::vector<int>(),并在析构函数中删除了y。 - chintan s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接