我有这堂课:
ref class Wrapper {
protected:
Native *pn;
public:
Wrapper(int val) { pn = new Native( val ); }
};
然后我从中得出:
ref class DerivedWrapper : public Wrapper{
public:
DerivedWrapper(int val) {pn = new DerivedNative(val); }
}
编译器抱怨: 错误C2248'Wrapper :: pn':无法访问类'Wrapper'中声明的私有成员
基类本机指针明显受到保护,派生类应该可以随时访问它。我所有的直觉告诉我这应该有用。参考课程有什么特别的东西吗?
我正在使用VS 2008 SP 1进行编译
答案 0 :(得分:2)
您的案例中的本机类型必须在已编译的程序集本身中具有公共或受保护的可访问性。有一个特殊的make_public
pragma指令可以提升本机类型。将其添加到代码中:
#pragma make_public(Native)
make_public
编译指示记录在http://msdn.microsoft.com/en-us/library/ms235607.aspx
答案 1 :(得分:0)
考虑在Wrapper的构造函数中初始化pn,或者需要为Wrapper提供默认构造函数。不要忘记ref class定义中的'public'。
public ref class Wrapper {
protected:
Native *pn;
Wrapper(Native * fpn):pn(fpn)
{}
public:
Wrapper(int val) { pn = new Native( val ); }
};
ref class DerivedWrapper : public Wrapper{
public:
DerivedWrapper(int val):Wrapper(new DerivedNative(val)){}
};