C++ cli C++;/CLI无法访问基类的受保护成员
我有这门课:C++ cli C++;/CLI无法访问基类的受保护成员,c++-cli,C++ Cli,我有这门课: 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)
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”中声明的私有成员
基类本机指针显然受到保护,派生类应该可以随时访问它。我所有的直觉告诉我这应该行得通。ref类有什么特别之处吗
我是使用VS 2008 SP 1编译的在您的情况下,本机类型必须在编译的程序集中具有公共或受保护的可访问性。有一个特殊的
make_public
pragma指令可以提升本机类型。将此添加到代码中:
#pragma make_public(Native)
make_public
pragma记录在考虑在包装器的构造函数中初始化pn,或者您需要为包装器提供默认构造函数。不要忘记ref类定义中的“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)){}
};
这两个类在同一个程序集中吗?否则,不允许(直接)从基类程序集中导出
Native
的类型,编译器将隐式地将其更改为private。但如果发生这种情况,您将得到警告。为什么不调用DerivedWrapper构造函数中的基构造函数来初始化该字段?您需要公共引用类