首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板类不能添加,一添加就出错?(vector,CArray)解决办法

2012-03-07 
模板类不能添加,一添加就出错?(vector,CArray)使用VC,我编了如下两个类,一个CMyTree类,继承自CTreeCtrl类,

模板类不能添加,一添加就出错?(vector,CArray)
使用VC,我编了如下两个类,一个CMyTree类,继承自CTreeCtrl类,另一个自定义类CMyData,处理一些数据用
CMyTree//继承CTreeCtrl
{
private:
//FriendInfo是我的一个结构
        CArray   <FriendInfo,FriendInfo&>   information;
public:
        bool   AddFri(...)
        {
                //...不相关代码
                FriendInfo   temp;
                information.Add(temp);//出错的地方
}


CMydata     //处理一些数据
{
        private:
                CMyTree   m_tree;

        UINT   CClientData::SetFrient(CString   FriendList,CTreeCtrl   *tree)
        {
                m_tree   =   (CMyTree*)tree;
                //...不相关代码
                m_tree.AddFri(...);//调用CMyTree.AddFri(),出错        
        }
}

本来我用的是vector,使用push_back的时候出错,因为急用,也没深究,改用了CArray,没想到还是出错,调试了一下,具体出错在如下代码中:

void   CArray <TYPE,   ARG_TYPE> ::SetAtGrow(INT_PTR   nIndex,   ARG_TYPE   newElement)
{
ASSERT_VALID(this);//出错的地方
ASSERT(nIndex   > =   0);

if(nIndex   <   0)
AfxThrowInvalidArgException();

if   (nIndex   > =   m_nSize)
SetSize(nIndex+1,   -1);
m_pData[nIndex]   =   newElement;
}

请各位帮帮忙啦,谢谢,急用啊

哦,补上FriendInfo结构,FriendState是一个枚举
struct   FriendInfo
{
CString   nickname;
CString   ip;
int   image;
CString   ID;
FriendState   state;
};

enum   FriendState{   OFFLINE,ONLINE,BUSY,HIDE,NOCHANGE   };

[解决办法]
MSDN 查 CObject,
看看其中 Remark 部分
[解决办法]
ASSERT_VALID(this);// 对象没有构造
m_tree = (CMyTree*)tree; //这句不知道怎么编译过的~把对象指针赋给对象~~没问题么?

[解决办法]
information.Add(temp);//Add()函数声明帖来看看
m_tree.AddFri(...);//m_tree是指针
ASSERT_VALID(this);//ASSERT_VALID(*this);
[解决办法]
如果m_tree也是指针的话
m_tree = (CMyTree*)tree;
应该这样写吧:
m_tree = dynamic_cast <CMyTree*> tree;
如果传入的tree没有问题的话~可能是从基类指针转为继承类指针的时候没有成功~
而基类没有成员information~

[解决办法]
你的tree没有指向正确的CMyTree对象吧
你的对象什么时候new的?
[解决办法]
use CTypedPtrArray

热点排行