class MyDialog:public CDialog
{......
 void *pFatherDialog;
......
}class CFatherDialog:public CDialog
{
MyDialog m_myDialog;
int number;
......
}BOOL CFatherDialog::OnInitDialog()
{......
m_myDialog.pFatherDialog = this;
}
再在MyDialog的一函数中
void CMyDialog::Function()
{
pFatherDialog->number = 0;
......
}现在的问题是pFatherDialog可以取得CFatherDialog 对象的地址,即pFatherDialog有值但却无法取得成员变量number,即上面的pFatherDialog->number = 0通不过,报告说->左边应是一指针。为什么?
小弟才疏学浅,还请各位高手海涵~!

解决方案 »

  1.   

    void *pFatherDialog;void類型指針沒有成員,如樓主的程序,需要強制轉換成父類指針方可。
      

  2.   

    是不是 CFatherDialog *pFatherDialog;这样呢?
    这样也是不行的哦。会不会是其他原因呢?
      

  3.   


    ((CFatherDialog *)pFatherDialog)->number = 0;注意包含头文件
      

  4.   

    class CFatherDialog:public CDialog
    {
    MyDialog m_myDialog;   // 這裡是類對像,而下面用的時候,怎麼將指針給它?改成MyDialog *m_myDialog;
    int number;
    ......
    }BOOL CFatherDialog::OnInitDialog()
    {......
    m_myDialog.pFatherDialog = this;//還有一個問題,你的pFatherDialog我怎麼沒見到賦值呀?
    }
      

  5.   

    CFatherDialog *pFatherDialog;这样呢?
    这样也是不行的哦。会不会是其他原因呢?這樣不行的提示是什麼?帖出來!
      

  6.   

    class CFatherDialog:public CDialog
    {
    MyDialog m_myDialog;   // 這裡是類對像,而下面用的時候,怎麼將指針給它?改成MyDialog *m_myDialog;
    int number;
    ......
    }
    但我下面用的时候是m_myDialog.pFatherDialog=this啊,this 指针是赋给pFatherDialog的啊BOOL CFatherDialog::OnInitDialog()
    {......
    m_myDialog.pFatherDialog = this;//還有一個問題,你的pFatherDialog我怎麼沒見到賦值呀?
    }确实pFatherDialog是没赋值,不规范但没问题,我的pFatherDialog是可以指向this的,即pFatherDialog的值是this 指向的那个地址。#####################################################################################((CFatherDialog *)pFatherDialog)->number = 0;注意包含头文件我把pFatherDialog的定义改为 CFatherDialog *pFatherDialog; 问题还是一样的。
    头文件刚开始忘了,后来加上来了。
      

  7.   

    class MyDialog:public CDialog
    {......
     CFatherDialog *pFatherDialog;//這裡更改.
    ......
    }class CFatherDialog:public CDialog
    {
    MyDialog m_myDialog;
    int number;             //這裡確保是public:型的變量
    ......
    }BOOL CFatherDialog::OnInitDialog()
    {......
    m_myDialog.pFatherDialog = this;
    }
    再在MyDialog的一函数中
    void CMyDialog::Function()
    {
    pFatherDialog->number = 0;
    ......
    }
    //將上面的提示修改後,看還會提示什麼錯誤?
      

  8.   

    我可以准确的告诉你number是public类型,恩我忘记了。
      

  9.   

    SORRY,现在代码不在我机器上,所以不能给你一手的资料。编译报错说->左边不是一个指向类\结构\共用体的指针。
      

  10.   

    就是这一句pFatherDialog->number = 0;
      

  11.   

    但这个时候pFatherDialog是有地址值,这个值就是前面的那个this值。
      

  12.   

    你原來是void *pFatherDialog定義,當然會出現那個提示了,只要強制轉換一下就不會出現了,如下:
         ((CFatherDialog *)pFatherDialog)->number=0;就不會有錯了。
      

  13.   

    class MyDialog:public CDialog
    {......
     void *pFatherDialog;//MyDialog成员
    ......
    }class CFatherDialog:public CDialog
    {
    MyDialog m_myDialog;
    int number;//CFatherDialog成员
    ......
    }BOOL CFatherDialog::OnInitDialog()
    {......
    m_myDialog.pFatherDialog = this;
    }
    再在MyDialog的一函数中
    void CMyDialog::Function()
    {
    pFatherDialog->number = 0;//虽然可以将CFatherDialog指针赋给pFatherDialog
                              //但pFatherDialog和number 并不属于同一类,
                              //所以应该会有编译错误.
    ......
    }
      

  14.   

    niying(逆颖)
    这位我认为你说的很有道理,请教你一下那我怎么样才能在CMyDialog的函数中去取得CFatherDialog中的成员变量呢?
      

  15.   

    或者说在CMyDialog的函数中去取得CFatherDialog对象,是不是用指向指针的指针呢?