0
考慮導出類streamTest的dll。下面的代碼:當std :: map <int,std :: ofstream>成員時,類不會從dll導出
class streamTest
{
public:
TEST_API streamTest();
TEST_API ~streamTest();
private:
std::map<int,std::ofstream> streamMap;
};
編譯沒有錯誤並運行從應用程序鏈接到DLL,精細不過下面的代碼:
class TEST_API streamTest
{
public:
streamTest();
streamTest();
private:
std::map<int,std::ofstream> streamMap;
};
給出警告,然後錯誤:
1>warning C4251: 'streamTest::streamMap' : class 'std::map<_Kty,_Ty>' needs to have dll-interface to be used by clients of class 'streamTest'
1> with
1> [
1> _Kty=int,
1> _Ty=std::ofstream
1> ]
1>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\fstream(1116): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ios(176) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_ofstream<_Elem,_Traits>::basic_ofstream(const std::basic_ofstream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
爲什麼它不會編譯,我如何提供std :: map的dll接口?我已經使用std :: map對象,然後在dll中沒有任何問題之前,std :: ofstream。請讓我知道我錯過了什麼...
P.S. TEST_API簡直是
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
謝謝,這很有道理 - +1。那麼,沒有解決辦法?當我導出所有的方法,但不是類本身時,它可以正常工作... –
你有沒有真正將'ofstream'實例放入'streamMap'中的代碼?如果編寫了這樣的代碼,我會感到驚訝。如果你不這樣做,那麼'streamMap'是什麼? –
是的,這只是代表該程序的示例。我把例如streamMap.insert(key,std :: ofstream(fname.c_str(),std :: ios_base :: binary));,工作正常。 –