2011-12-24 183 views
3

分配錯誤的大小目前我正在從出口通過DLLEXPORT DLL中的幾節課,我做我的私有成員私有所以我提供該DLL的頭不包括任何私人。Visual Studio 2010的C++編譯器

問題是:現在編譯器不知道類的大小,它認爲我分配一個空的類(1字節大小),不是應該在.lib中生成的信息與DLL?我無法隱藏私人數據?

需要明確的是,該DLL頭使用__declspec(dllexport)的和部署頭__declspec(dllimport的)導出整個類

回答

4

你不能爲你做的只是發現了原因。沒有私人成員的班級與您的班級的班級不同,其私人成員爲。編譯器不會分配錯誤的大小,您正在玩​​兩個具有相同名稱的不同類。

使用類似pimpl成語來隱藏類的私處。 (見Opaque pointersThe fast pimpl idiom)。

+0

感謝墊,所以我需要一個工廠,把我的私有成員隱藏? – Caian

+0

@Caian:這是一種方法,但更直接的解決方案是隻是告訴他們有一個指向某個對象的用戶,但從來沒有透露是什麼物體的細節。用戶代碼無法確定對象的大小,但如果(隱藏的)API端代表用戶管理所有內容,那沒關係。 – wallyk

+0

@Caian:你不需要一個「工廠」來實現pimpl成語。 – Mat

相關問題