【问题标题】:How to use CArray inside CArray in MFC?如何在 MFC 中的 CArray 中使用 CArray?
【发布时间】:2019-03-13 04:39:09
【问题描述】:

我需要像这样在新数组中使用自定义数组。

typedef CArray<CPoint,CPoint&> arr1;
typedef CArray<arr1,arr1&> arr2;

arr1 a;
arr2 b;

b.Add(a);

我收到此错误:

错误 C2248: 'CObject::operator =' : 无法访问私有成员 在类“CObject”中声明

【问题讨论】:

标签: c++ mfc


【解决方案1】:

这里的问题是CArray没有复制构造函数和operator=()。但是您可以轻松地扩展这个类并实现所需的功能:

template <class TYPE, class ARG_TYPE>
class CArrayEx : public CArray<TYPE, ARG_TYPE>
{
// Construction
public:
    CArrayEx ()
    {
    };
    CArrayEx (const CArrayEx &x)
    {
        *this = x;
    };

// Assigment
public:
    CArrayEx &operator = (const CArrayEx &x)
    {
        if(this != &x)
        {
            Copy(x);
        }

        return *this;
    };
};

之后,您可以像这样定义自己的类型:

typedef CArrayEx<CPoint, CPoint&> CPointArray;
typedef CArray<CPointArray, CPointArray&> CDoublePointArray;

下面是一个关于如何使用它的非常简单的例子:

    CDoublePointArray doubleArray;

    CPointArray singleArray;
    singleArray.Add(CPoint(10,10));

    doubleArray.Add(singleArray);

作为CArray 的替代解决方案,我建议使用std::vector。您可以直接使用它,因为它带有复制构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2012-03-10
    • 1970-01-01
    • 2014-12-14
    • 2015-11-13
    • 2014-06-26
    相关资源
    最近更新 更多