为什么Symbian的M类接口无法在视图(VIEW)里实现?

king-0325 2010-01-08 12:04:19
我在定义了一个C 类和一个M类,在C类中定义M类的指针,M类有纯虚函数
在VIEW 中继承M类并定义M类函数 ,具体头文件代码如下:
#ifndef CDRAWIMG_H_
#define CDRAWIMG_H_
#include <e32std.h>
#include <e32base.h>
#include <MDHandler.h>
class CDrawImg
{
public:
void ConstructL();
static CDrawImg * NewL();
static CDrawImg * NewLC();
void Move();
virtual ~CDrawImg();
private:
MDHandler *pHandler;
CDrawImg();
};

#endif /* CDR

接口类头文件:
#ifndef MDHANDLER_H_
#define MDHANDLER_H_

class MDHandler
{
public:
virtual void ShowImg()=0;
};

#endif /* MDHANDLER_H_ */
VIEW类头文件:
#include <coecntrl.h>
#include <MDHandler.h>
#include <eikenv.h>
// CLASS DECLARATION
class CTestModeAppView : public CCoeControl,public MDHandler
{
public:
void ShowImg();
................
}
以上就是小弟的代码,编译通过,但在C类中Move函数调用 ShowImg时,系统崩溃(调试时断点能进入到C类)
void CDrawImg::Move()
{
pHandler->ShowImg() //运行在这个地方系统就退出卡擦掉了,为什么啊,郁闷死了!
}
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
king-0325 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xujunfeng000 的回复:]
从楼主的类定义来看,必定是新手。我就直接将代码给你贴出来吧^_^


构造CDrawImg的时候,将CTestModeAppView的对象指针赋值给CDrawImg的成员pHandler。

下面这样定义:
void ConstructL(MDHandler *pHandler);
static CDrawImg * NewL(MDHandler *pHandler);
stati……
[/Quote]
谢谢!此问题已经解决了!
Juncof 2010-04-22
  • 打赏
  • 举报
回复
从楼主的类定义来看,必定是新手。我就直接将代码给你贴出来吧^_^


构造CDrawImg的时候,将CTestModeAppView的对象指针赋值给CDrawImg的成员pHandler


下面这样定义:
void ConstructL(MDHandler *pHandler);
static CDrawImg * NewL(MDHandler *pHandler);
static CDrawImg * NewLC(MDHandler *pHandler);

void CDrawImg::ConstructL(MDHandler *pHandler)
{
this->pHandler = pHandler;
}

void CDrawImg::Move()
{
pHandler->ShowImg() //运行在这个地方系统就退出卡擦掉了,为什么啊,郁闷死了!
}

这样定义:
//CTestModeAppView *iView;
CDrawImg *iDrawImg = CDrawImg::NewL(iView); //根据你的需要,保证iVew --> pHandler即可。
Fioit 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 leequnwan 的回复:]

不要问我为什么,实践证明这样声明才是对的:
// CLASS DECLARATION
class CTestModeAppView : public MDHandler, public CCoeControl
{
public:
void ShowImg();
................
}
[/Quote]

把M类放在C类前继承很危险。你把C类子类指针放到清除栈再弹出来看看。
楼主的M类指针初始化了没?panic代码是什么?
dyw 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 leequnwan 的回复:]

不要问我为什么,实践证明这样声明才是对的:
// CLASS DECLARATION
class CTestModeAppView : public MDHandler, public CCoeControl
{
public:
void ShowImg();
................
}
[/Quote]

这是个危险的尝试。

lz的问题:应该是CDrawImg类的pHandler没有初始化导致的。可以在构造CDrawImg时把MHandler的地址传入。
leequnwan 2010-04-15
  • 打赏
  • 举报
回复
不要问我为什么,实践证明这样声明才是对的:
// CLASS DECLARATION
class CTestModeAppView : public MDHandler, public CCoeControl
{
public:
void ShowImg();
................
}
king-0325 2010-01-08
  • 打赏
  • 举报
回复
肯请各位大哥给个实例,能否有源码?
king-0325 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jmulxg 的回复:]
肯定是了

M类设为私有,却没有设置M类的接口



[/Quote]

大哥,我没听明白你的意思!你说的是M类为公有的我也试过一样的,你说的设置M类的啥意思,M类本身就是接口类,还设置什么接口
king-0325 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jmulxg 的回复:]
pHandler 是否为空?
[/Quote]

不为空 有地址,因为 M类不需要构造,不需要NEW出来
jmulxg 2010-01-08
  • 打赏
  • 举报
回复
肯定是了

M类设为私有,却没有设置M类的接口


jmulxg 2010-01-08
  • 打赏
  • 举报
回复
pHandler 是否为空?

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧