//.H, Record类定义
class Record : public CObject
{
public:
CString GetField1(){return m_csField1;}
void SetField1(CString csField1){m_csField1 = csField1;}
Record();
virtual ~Record();private:
CString m_csField1;
};
//.CPPRecord::Record()
{
}
Record::~Record()
{
}
//在CArray模板中使用Record类
void CTestTemplateDlg::OnBtnload()
{
// TODO: Add your control notification handler code here
CArray<Record, Record&> rs;
InitArray(rs);
}
void CTestTemplateDlg::InitArray(CArray<Record, Record&> rs)
{
Record r;
r.SetField1("Hello!");
rs.Add(r);
}编译出现错误:
error C2664: 'InitArray' : cannot convert parameter 1 from 'class CArray<class Record,class Record &>' to 'class CArray<class Record,class Record &>'
No copy constructor available for class 'CArray<class Record,class Record &>'为什么会出现这个错误?要怎么改?
即使编译成功修改的也是型参的值啊。
把InitArray的参数定义成引用试试?
void CTestTemplateDlg::InitArray(CArray<Record, Record&> & rs)
error C2664: 'InitArray' : cannot convert parameter 1 from 'class CArray<class Record *,class Record *>' to 'class CArray<class Record *,class Record *>'
No copy constructor available for class 'CArray<class Record *,class Record *>'改成CArray <Record, Record&>& rs,编译有另外一个错误
error C2582: 'Record' : 'operator =' function is unavailable
:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(1566) : while compiling class-template member function 'void __thiscall CArray<class Record,class Record &>::SetAtGrow(int,class Record &)'
第二个就是说你没写operator =。
不知道你的Record怎么写的,如果不想改现有程序,建议直接用vector,效果和CArray一样。
{
Record *pRecord = new Record;
if (pRecord)
{
pRecord->SetField1("Hello!");
rs->Add(pRecord);
}
}void CTestTemplateDlg::OnBtnload()
{
// TODO: Add your control notification handler code here
CArray<Record *, Record *> rs;
InitArray(&rs);
}//先删除对象,然后删除数组元素。
delete rs[i];
rs.RemoveAt(i);
error C2664: 'InitArray' : cannot convert parameter 1 from 'class CArray<class Record *,class Record *> *' to 'class CArray<class Record *,class Record *>'
No constructor could take the source type, or constructor overload resolution was ambiguous
error C2511: 'InitArray' : overloaded member function 'void (class CArray<class Record *,class Record *> *)' not found in 'CTestTemplateDlg'