2014-07-27 38 views
0

使用CARRAY對象我必須使用CARRAY對象CARRAY在CARRAY

// .h file 
class ArrClass : public CArray<int, int> 
{ 
public: 
    int m_id; 
    void Func1(){ m_id = 1;}; 
}; 

// .cpp file 
void CTestDlg::OnBnClickedButton1() 
{ 
    ArrClass arr1; 
    CArray<ArrClass, ArrClass> arr2; 
    arr2.Add(arr1);  // error !!!! 
} 

此錯誤是一個問題:

error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' 

請問該如何解決呢?請幫幫我!

+0

'CARRAY ARR2;' – user1793036

回答

1

CArray要求其元素類型是可複製的 - 但它本身不可複製。因此,您不能有CArrayCArray s。

請考慮使用std::vector來代替。

+0

謝謝Tandetnik, 如果我定義「拷貝構造函數」和 「ArrClass」 類「賦值運算符」功能,錯誤解決。 非常感謝。 – nabegheh95

2

我應該爲「ArrClass」類定義「複製構造函數」和「賦值運算符」函數。

class ArrClass : public CArray<int, int> 
{ 
public: 
    int m_id; 

    ArrClass(){}; 
    ArrClass(const ArrClass& obj){m_id = obj.m_id;}; // copy constructor 
    void Func1(){ m_id = 1;}; 
    ArrClass operator=(const ArrClass& obj) // assignment operator 
    { 
     m_id = obj.m_id; 
     return *this; 
    }; 
}; 

錯誤解決了,謝謝大家。

+0

請注意,您的副本構造函數和賦值運算符僅複製'm_id'成員 - 但不是「CArray」的實際內容。 「複製」將始終爲空(如'GetSize()'將返回0)。那真的是你想要的嗎? –

+0

哦,是的。謝謝。 – nabegheh95

0

代碼還行,可以嗎?

ArrClass(const ArrClass& obj) // copy constructor 
    { 
     Copy(obj); 

     m_id = obj.m_id; 
    }; 

ArrClass operator=(const ArrClass& obj) // assignment operator 
    { 
     Copy(obj); 

     m_id = obj.m_id; 
     return *this; 
    };