模板类不能添加,一添加就出错?(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