我知道我可以使用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*>()));
>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;
的声明pFunctionClass->Function(parameter);
实现头,如下所示:`void CFunctionClass :: Function(CArray parameter)1&gt; File.cpp(第Z行):错误C2660:&#39; CClassFunction :: Function&#39; :function不带0个参数
Function
的调用,但未提供参数,如下所示:Function
这种方法不起作用,但它走向结论:无法使用复制构造函数为函数参数分配默认值。
方法3
如果我尝试使用 lambda :
pClassFunction->Function();
,然后我会得到这两个错误的多个输出:
void Function(CArray<CClass*> parameter = [] () -> CArray<CClass*>{ return CArray<CClass*> (); } );
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
那么,我如何提供一个空数组作为参数的默认值?
答案 0 :(得分:0)
使用此声明
void Function(CArray<CClass*> parameter /*...*/);
你不能。正如您所注意到的那样,调用此函数将调用CObject
的私有拷贝构造函数。
您可以做的是在您的班级中添加static CArray<CClass*>
的对象,并通过引用来初始化该函数。这样它将是空的(只要你不填充它......),你就可以对它进行.IsEmpty()
检查。
private:
static CArray<CClass*> myObj;
//...
void Function(CArray<CClass*> ¶meter = myObj);
或者将其初始化为0.这样您只需按if (parameter)
或if (NULL == parameter)
进行检查。
void Function(CArray<CClass*> *parameter = NULL);