hur.cn - 华软网

 热门搜索

vc++中一个类访问另一个的成员变量的问题

  作者:未知    来源:网络    更新时间:2011/1/12
我做了个单文档formview (类CAU2VIEW)然后又增加了个dialog窗口(类CAUOE) ,现在我在fromview中 定义了个dialog类型的指针变量 CAUOE * pauoe;,然后访问formview 的m_list1成员变量。在m_list双击事件中把list中的值传给dialog中的m_edit控件。  代码void CAU2View::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
   //----鼠标双击事件list1
CString strname,str2,str3,str4;


     for(id=0;id<m_list1.GetItemCount();id++)
 {
   if(m_list1.GetItemState(id,LVIS_SELECTED)==LVIS_SELECTED)
{

CAUOE m_auoe;
pauoe=&(m_auoe);

strname=m_list1.GetItemText(id,0);
str2=m_list1.GetItemText(id,1);
str3=m_list1.GetItemText(id,2);
str4=m_list1.GetItemText(id,3);

//---把值传给 子窗口中的响应控件
pauoe->m_edit1=strname;
pauoe->m_edit2=str2;
pauoe->m_edit3=str3;
pauoe->m_edit4=str4;

m_auoe.DoModal();



}

}

*pResult = 0;
}


然后运行的时候都正常 
然则在往下些程序  就提醒error C2143: syntax error : missing ';' before '*'
d:\pb程序备份\pb乱摊子\vc\au\au2\au2view.h(33) : error C2501: 'CAU2Doc' : missing storage-class or type specifiers
d:\pb程序备份\pb乱摊子\vc\au\au2\au2view.h(33) : error C2501: 'GetDocument' : missing storage-class or type specifiers
d:\pb程序备份\pb乱摊子\vc\au\au2\au2view.h(56) : error C2143: syntax error : missing ';' before '*'
d:\pb程序备份\pb乱摊子\vc\au\au2\au2view.h(56) : error C2501: 'CAUOE' : missing storage-class or type specifiers
d:\pb程序备份\pb乱摊子\vc\au\au2\au2view.h(56) : error C2501: 'pauoe' : missing storage-class or type specifiers

指向CAU2VIEW头资料中的 
public:
CAU2Doc * GetDocument();
   CAUOE * pauoe;

然后我注视掉之后 在打开  就又没有错了  ,接着写 又是这样的毛病 ,郁闷无比 大侠们 指点一下 那里犯错了啊

---华软 网友回答---
头资料加了吗?

我的习气用法

#include "Cxx.h"

CxxDLG dlg;
dlg.m_edit1=strname;

你试下。看还会不会出问题。
---华软网友回复---
应该是没加头资料的缘故

#include "Cxx.h"
---华软网友回复---
view类的h头资料上写上
class CAU2Doc;
---华软网友回复---
这样不用把两个类酿成友元类吗?
---华软网友回复---
加头资料了  要否则  不可能运行  这个毛病实在 续写其余代码的时候出来的 
---华软网友回复---
你在那里加代码了?编译时要完整编译
---华软网友回复---
VisualEleven

view类的h头资料上写上
class CAU2Doc;

这是什么意思 我试过了  不行
 
---华软网友回复---
我用hxyzby说的方法 很快就解决了  ,然则如果我想dialog 类访问FOrmview类中的list控件  修改其中的值,该怎么做啊 CAU2View m_au2;
m_au2.m_list1.SetItemText(0,1,"sss"); 然则报错  这接就Debug Assertion Failed! 终止  重试  忽略了 怎么解决啊 
---华软网友回复---
引用 8 楼 luyinglply 的回复:
我用hxyzby说的方法 很快就解决了  ,然则如果我想dialog 类访问FOrmview类中的list控件  修改其中的值,该怎么做啊 CAU2View m_au2;
m_au2.m_list1.SetItemText(0,1,"sss"); 然则报错  这接就Debug Assertion Failed! 终止  重试  忽略了 怎么解决啊


CAU2View m_au2; 这样定义是猎取View的大忌,由于主框架的View已经实例化初始化完成了,运用以下代码猎取:

CMainFrame *wndFrm = (CMainFrame *)AfxGetMainWnd();
CAU2View *m_au2 = (CAU2View *)wndFrm->GetActiveView();
---华软网友回复---
楼上说得不对啊,CAU2View m_au2; 这样定义不是大忌,而是这里新定义了一个CAU2View的对象,基本就不是框架中的View,对m_au2这个对象的所有操作都是浮云啊,楼主多看看C++基础吧。
---华软网友回复---
qfc8513 说的方法我用过了 确实好用 ,lfm13720说的也对 ,确实没有真正指向view,调用都是无效的。然后我用全局指针指向了view  ,也好用了  ,多谢大家了。
---华软网友回复---
呵呵,不是说定义是大忌,是说这样定义猎取客户区View是大忌!
引用 10 楼 lfm13720 的回复:
楼上说得不对啊,CAU2View m_au2; 这样定义不是大忌,而是这里新定义了一个CAU2View的对象,基本就不是框架中的View,对m_au2这个对象的所有操作都是浮云啊,楼主多看看C++基础吧。
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。