2012-06-25 84 views
4

Possible Duplicate:
std::vector needs to have dll-interface to be used by clients of class 'X<T> warning警告C4251:需要有DLL接口由類

這是我這組的第一篇文章的客戶端使用。

我正在創建一個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 
}; 

我已經看過了解決方案和嘗試和失敗。

我不想禁用該警告。

+0

另外這個 - http://stackoverflow.com/questions/767579/exporting-classes-containing-std-objects-vector-map-etc-from-a-dll –

+0

我很驚訝這些沒有出現作爲建議... –

+0

和這個http://stackoverflow.com/a/4563701/400303 – Mohammad

回答

8

切勿將STL容器保留爲導出的類成員。客戶端應用程序可能會使用與您的STL版本不同的STL版本進行編譯,但運行時行爲未定義 在你的情況下,很容易用指針向量< int> *替換向量< int>成員。在類構造函數中初始化它,並在類的析構函數中釋放。

+0

謝謝亞歷克斯。我不是編碼方面的專家。我嘗試了你的話,但我仍然得到警告。所以在構造函數中,我做了m_vAvailChannelsFromRx.push_back(0),並且在析構函數中,我只清除了變量。 –

+0

這意味着,你沒有嘗試完全按照我的建議。無論如何,這個問題是關閉的。 –

+0

那麼,我在構造函數y = new std :: vector ()中做了以下操作,並在析構函數中刪除y。 –