【问题标题】:warning C4251: needs to have dll-interface to be used by clients of class [duplicate]警告 C4251:需要有 dll 接口供类的客户端使用 [重复]
【发布时间】:2012-06-26 17:28:04
【问题描述】:

可能重复:
std::vector needs to have dll-interface to be used by clients of class 'X<T> warning

这是我在这个小组的第一篇文章。

我正在创建一个 DLL 并在应用程序的主文件中调用它。代码编译正常,但出现以下错误:

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

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

我不想禁用警告。

【问题讨论】:

标签: c++


【解决方案1】:

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

【讨论】:

  • 谢谢亚历克斯。我不是编码专家。我试过你说的,但我仍然收到警告。所以在构造函数中,我做了 m_vAvailChannelsFromRx.push_back(0) 而在析构函数中,我只是清除了变量。
  • 好吧,我在构造函数中做了以下 y = new std::vector() 并在析构函数中删除了 y。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多