如何使用空CArray初始化CArray <cclass *>函数参数的默认值?

时间:2015-08-19 15:58:15

标签: c++ arrays mfc default-value assignment-operator

我知道我可以使用std::vector做得更好,但我正在搞乱的应用程序,已经在很多相关函数上有一堆CArray参数......我不会改变他们现在都在这里!

我只是想将一个空的CArray<CClass*> - 指针数组定义为CClass,因此问题不能 {{1} 1}} constructor - 作为函数参数的默认值。

方法1

如果我尝试使用赋值运算符默认构造函数执行此操作:

CClass

我收到错误:

void Function(CArray<CClass*> parameter = CArray<CClass*>());

方法2

我还尝试使用复制构造函数

1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxTempl.h(262): error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afx.h(535) : see declaration of 'CObject::CObject'
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afx.h(510) : see declaration of 'CObject'
1>          This diagnostic occurred in the compiler generated function 'CArray<TYPE>::CArray(const CArray<TYPE> &)'
1>          with
1>          [
1>              TYPE=CClass *
1>          ]

我收到了错误:

void Function(CArray<Class*> parameter(CArray<CClass*>()));
  • 第X行:包含一个向Function提供参数的调用,如下所示: >File.cpp(line X): error C2664: 'FunctionClass::Function' : cannot convert parameter 1 from 'CArray<TYPE>' to 'CArray<TYPE> (__cdecl *)(CArray<TYPE> (__cdecl *)(void))' 1> with 1> [ 1> TYPE=CClass* 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

1&gt; CFunctionClass.cpp(第Y行):错误C2511:&#39; void CFunctionClass :: Function(CArray)&#39; :在CShoePlaceDoc&#39;中找不到重载的成员函数 1 GT;同 1 GT; [ 1 GT; TYPE = CClass * 1 GT; ] 1 GT; FunctionClass.h(A行):参见&#39; CFunctionClass&#39;

的声明
  • 行Y包含pFunctionClass->Function(parameter);实现头,如下所示:`void CFunctionClass :: Function(CArray parameter)

1&gt; File.cpp(第Z行):错误C2660:&#39; CClassFunction :: Function&#39; :function不带0个参数

  • 第Z行:包含对Function的调用,但未提供参数,如下所示:Function

这种方法不起作用,但它走向结论:无法使用复制构造函数为函数参数分配默认值。

方法3

如果我尝试使用 lambda

pClassFunction->Function();

,然后我会得到这两个错误的多个输出:

void Function(CArray<CClass*> parameter = [] () -> CArray<CClass*>{ return CArray<CClass*> (); } );
  • A行:方法声明
  • B行:关闭包含1>FunctionClass.h(line A): error C2440: 'default argument' : cannot convert from '`anonymous-namespace'::<lambda2>' to 'CArray<TYPE>' 1> with 1> [ 1> TYPE=CClass* 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 1>FunctionClass.h(line B): fatal error C1903: unable to recover from previous error(s); stopping compilation 方法的}类的FunctionClass

问题的根源

问题的根本原因似乎是Function是一个直接派生自CArray的类,它将赋值运算符声明为私有:

CObject

那么,我如何提供一个空数组作为参数的默认值?

1 个答案:

答案 0 :(得分:0)

使用此声明

void Function(CArray<CClass*> parameter /*...*/);

你不能。正如您所注意到的那样,调用此函数将调用CObject的私有拷贝构造函数。

您可以做的是在您的班级中添加static CArray<CClass*>的对象,并通过引用来初始化该函数。这样它将是空的(只要你不填充它......),你就可以对它进行.IsEmpty()检查。

private:
    static CArray<CClass*> myObj;
//...
void Function(CArray<CClass*> &parameter = myObj);

或者将其初始化为0.这样您只需按if (parameter)if (NULL == parameter)进行检查。

void Function(CArray<CClass*> *parameter = NULL);