我正在尝试访问派生类中的变量。
printf("%c", God.m_Please.me);
在God类声明中我已将m_Please声明为
private:
Please *m_Please
和helpme是从Please
派生的类中声明的变量 class Help : public Please
和我被定义为
unsigned char me[1000];
当我尝试编译时,我收到错误
error C2228: left of '.me' must have class/struct/union type
我正在使用Visual Studio 6.0
请回复....
前锋宣布“上课请”;在上帝面前 - wqking 这有助于删除第一个错误:)但我仍然得到2个其他错误
谢谢,
答案 0 :(得分:2)
Please* Please
私有。您无法从派生类访问私有成员。它必须受保护。
class Please{
protected:
Please* m_Please;
int pplHelped;
};
class Help : public Please {
void whatever(){
//assume m_Please was initialized elsewhere
Please::m_Please->pplHelped; //do something with pplHelped
}
};
如果您尝试通过派生类的实例访问基本成员变量,则应在基类中声明 public 。
class Please{
public:
Please* m_Please; //init this somewhere
int pplHelped;
};
class Help : public Please{
};
void somefunc(){
Help God;
//assume m_Please was initialized in Constructor
printf("%d\n", God.m_Please->pplHelped;
}
答案 1 :(得分:1)
m_Please
是一个指针(Please*
)。您不能在指针上使用运算符.
。
正确的方法是
printf("%c",God.m_Please->me);
答案 2 :(得分:0)
God.m_Please->我
- >相反
m_Please是一个指针
答案 3 :(得分:0)
God.m_Please.me
与PLease *m_Please
不一致。由于m_Please
是指针,请使用God.m_Please->me
。仍然,它提供对字符数组的访问,因此您需要指定数组printf()
中应显示哪个字符(例如me[0]
),或使用printf
格式{{1} }它可以显示ASCIIZ字符串。
答案 4 :(得分:0)
你的语法令人困惑。我们将非常感谢完整的示例代码。
如果我理解正确,您正尝试从派生类访问私有类成员。除非将派生类声明为基类的朋友,否则这将不起作用。正确的方法是使用protected
代替private
。
哦,正如其他人建议的那样,使用->
代替.
来访问指针的成员。