在C ++中访问派生类变量?

时间:2010-12-22 10:06:40

标签: c++

我正在尝试访问派生类中的变量。

     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个其他错误

谢谢,

5 个答案:

答案 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.mePLease *m_Please不一致。由于m_Please是指针,请使用God.m_Please->me。仍然,它提供对字符数组的访问,因此您需要指定数组printf()中应显示哪个字符(例如me[0]),或使用printf格式{{1} }它可以显示ASCIIZ字符串。

答案 4 :(得分:0)

你的语法令人困惑。我们将非常感谢完整的示例代码。

如果我理解正确,您正尝试从派生类访问私有类成员。除非将派生类声明为基类的朋友,否则这将不起作用。正确的方法是使用protected代替private

哦,正如其他人建议的那样,使用->代替.来访问指针的成员。