当前位置: 代码迷 >> Symbian >> error C2243: 'type cast' : conversion from 'class CTeacher *' to 'class CBase *' exists, but is inaccessible解决方案
  详细解决方案

error C2243: 'type cast' : conversion from 'class CTeacher *' to 'class CBase *' exists, but is inaccessible解决方案

热度:9623   发布时间:2013-02-26 00:00:00.0
error C2243: 'type cast' : conversion from 'class CTeacher *' to 'class CBase *' exists, but is inaccessible
error   C2243:   'type   cast '   :   conversion   from   'class   CTeacher   * '   to   'class   CBase   * '   exists,   but   is   inaccessible

我在编译时出现了这个错误
for(i=0;i <numberOfTeacher;i++)
{
CTeacher*   tea=CTeacher::NewL(readTeaStream);
CleanupStack::PushL(tea);
flat2-> AppendL(*tea);
CleanupStack::Pop(tea);
}

前面的定义是
static   CStudent*   NewL(TDes&   aName,TInt32   aNo,TInt32   aScore);
static   CTeacher*   NewLC(TDes&   aName,TInt32   aNo,TInt32   aScore);
~CStudent();
static   CTeacher*   NewL(RReadStream&   aStream);
static   CTeacher*   NewLC(RReadStream&   aStream);


CArrayFixFlat <CTeacher> *   flat1=new(ELeave)CArrayFixFlat <CTeacher> (4);

把//CleanupStack::PushL(tea);

//CleanupStack::Pop();
注销掉可以编译但是不能运行
这里一个压栈出栈在别的地方也经常用,怎么会有问题呢
是不是其他代码的问题呢
初学Symbian   ,大家多多指教阿

------解决方案--------------------------------------------------------
1. CTeacher要从CBase派生
2. CArrayFixFlat <CTeacher*> * flat1 = new (ELeave) CArrayFixFlat <CTeacher*> (4);
flat1-> AppendL(tea);
最好把继承关系列一下
------解决方案--------------------------------------------------------
呵呵。楼上说的应该不是正解。楼上的,看一下cleanupstack的pushl接口,除了cbase*之外还有tany*,也就是说,如果不从cbase上继承来的指针,也可以push进去。比如char*的野指针。

楼主的问题,我猜测,是多重继承了cbase,也就是说,你从多个c类继承来的。

楼主,是否可以把cteacher类的声明帖一下。

class cteacher : public cbase,应该是这样的。还有一些构造函数。也牵扯到这种复制。这是c++规定的。比较复杂。
  相关解决方案