¿Cómo puedo inicializar el valor predeterminado de un parámetro de función CArray <CClass *> con un CArray vacío?

Sé que podría hacerlo mejor constd::vector, pero la aplicación con la que estoy jugando ya tiene un montón deCArray parámetros en muchas funciones relacionadas ... ¡y no las cambiaré todas por el momento!

Simplemente quiero definir un vacíoCArray<CClass*> - gama depunteros aCClassentonces el problemano puede ser sobre elCClass constructor: como el valor predeterminado de un parámetro de función.

Enfoque 1

Si trato de hacerlo conoperador de asignación yConstructor predeterminado:

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

Me sale el error:

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>          ]

Enfoque 2

También probé con unconstructor de copia:

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

Tengo los errores:

 >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
línea X: contiene una llamada que proporciona el parámetro a Function, como se muestra:pFunctionClass->Function(parameter);

1> CFunctionClass.cpp (línea Y): error C2511: 'void CFunctionClass :: Function (CArray)': la función miembro sobrecargada no se encuentra en 'CShoePlaceDoc' 1> con 1> [1> TYPE = CClass * 1>] 1> FunctionClass.h (línea A): ver declaración de 'CFunctionClass'

la línea Y contiene elFunction encabezado de implementación, como se muestra: `void CFunctionClass :: Function (parámetro CArray)

1> File.cpp (línea Z): error C2660: 'CClassFunction :: Function': la función no toma 0 argumentos

línea Z: contiene una llamada aFunctionsin suministrarle parámetros, como se muestra:pClassFunction->Function();

El enfoque no funcionó, pero se abrió camino hacia unconclusión: No es posible utilizar un constructor de copia para asignar un valor predeterminado para un parámetro de función.

Enfoque 3

Y si lo intento con unlambda:

void Function(CArray<CClass*> parameter = [] () -> CArray<CClass*>{ return CArray<CClass*> (); } );

, obtendré múltiples salidas de estos dos errores:

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
línea A: declaración del métodolínea B: cierre} deFunctionClass clase que contieneFunction método

Origen del problema

La causa raíz del problema parece ser el hecho de queCArray es una clase directamente derivada deCObject, que declara que el operador de asignación es privado:

class AFX_NOVTABLE CObject
{
//...
private:
    CObject(const CObject& objectSrc);              // no implementation
    void operator=(const CObject& objectSrc);       // no implementation
//...
}

Entonces, ¿cómo puedo proporcionar una matriz vacía como valor predeterminado para el parámetro?

Respuestas a la pregunta(1)

Su respuesta a la pregunta