//.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 &>'为什么会出现这个错误?要怎么改?

解决方案 »

  1.   

    你定义一个class Record的拷贝构造函数试试?不过你这样做初始化不了这个CArray啊。
    即使编译成功修改的也是型参的值啊。
    把InitArray的参数定义成引用试试?
    void CTestTemplateDlg::InitArray(CArray<Record, Record&> & rs)
      

  2.   

    CArray<Record *, Record *> rs;
      

  3.   

    CArray<Record, Record&>& rs
      

  4.   

    改成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 &)'
      

  5.   

    第一个说你的Record 没有copy constructor
    第二个就是说你没写operator =。
    不知道你的Record怎么写的,如果不想改现有程序,建议直接用vector,效果和CArray一样。
      

  6.   

    Record类在提问里有内容,错误意思我知道,但不清楚具体要怎么做才能解决问题
      

  7.   

    //改成这样行吗?CArray <Record *, Record *> rs; void CTestTemplateDlg::InitArray(CArray<Record *, Record *> *rs)
    {
        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);
      

  8.   

    不行,有两个错误
    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'