2011-12-24 145 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

相关问题