我正在尝试将项目从Visual Studio迁移到c++ 11。我解决了许多问题,但还有一个我似乎无法用MFC破解的问题:

error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' (file.cpp)
: see declaration of 'CObject::CObject'
: see declaration of 'CObject'
This diagnostic occurred in the compiler generated function 'CList<ParameterValue,ParameterValue &>::CList(const CList<ParameterValue,ParameterValue &> &)'

这是我们最后未更改的代码,在针对Visual Studio 2010工具集时可以很好地进行编译。据我所知,CObject的定义似乎也没有改变,这使得它变得陌生。

这里还报告了其他类似的问题,但是我在那里找不到我的问题的解决方案。在大多数其他情况下,问题似乎是由于缺少公共(public)默认构造函数,Copy构造函数或赋值运算符引起的。

但是,扩展CList的类提供所有这些的公共(public)版本,而ParameterValue不会从CObject继承。
class __declspec(dllexport) GParameterValueList : public CList<ParameterValue, ParameterValue&>
{
// ParameterValue is a struct that DOES NOT inherit from CObject (or anything)
public:
    GParameterValueList();
    GParameterValueList(const GParameterValueList& SrcList);
    GParameterValueList& operator=(const GParameterValueList& SrcList);
}

任何帮助,将不胜感激。

附言:我们的实现已导出到DLL中,我想知道这是否可能引起一些冲突?

编辑:在这些CObject派生类中,没有error using CArrayerror using CArray->的不重复项,缺少公共(public)默认值和副本构造函数。如上所述,我们的代码并非如此。

最佳答案

我认为问题出在您的ParameterValue类中。尝试在其中声明公共(public)构造函数,包括默认构造函数。
在我看来,CList试图在某个地方调用ParameterValue构造函数,但是前者不能,因为后者是私有(private)的。

或者,尝试使用指针列表,例如CList<ParameterValue*, ParameterValue*&>

另一种选择是使用std容器而不是CList。

08-06 13:14