Wie kann ich den Standardwert eines CArray <CClass *> -Funktionsparameters mit einem leeren CArray initialisieren?

Ich weiß, ich könnte das besser machen mitstd::vector, aber die Anwendung, mit der ich mich beschäftige, hat bereits eine Reihe vonCArray Parameter für viele verwandte Funktionen ... und ich werde sie im Moment nicht alle ändern!

Ich möchte einfach ein leeres @ definierCArray<CClass*> - Anordnung von Zeiger zuCClass, also das Problemkann nicht sei auf derCClass -Konstruktor - als Standardwert eines Funktionsparameters.

Ansatz 1

Wenn ich es versuche mitAufgabenverwalte unddefault constructor:

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

Ich erhalte den Fehler:

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

Ansatz 2

Ich habe es auch mit einem @ versuccopy constructor:

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

Ich habe die Fehler erhalten:

 >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
line X: Enthält einen Aufruf, der den Parameter an Function liefert, wie gezeigt:pFunctionClass->Function(parameter);

1> CFunctionClass.cpp (Zeile Y): Fehler C2511: 'void CFunctionClass :: Function (CArray)': Überladene Elementfunktion wurde in 'CShoePlaceDoc' 1> mit 1> [1> TYPE = CClass * 1>] 1 nicht gefunden > FunctionClass.h (Zeile A): siehe Deklaration von 'CFunctionClass'

Linie Y enthält dasFunction Implementierungsheader, wie gezeigt: `void CFunctionClass :: Function (CArray-Parameter)

1> File.cpp (Zeile Z): Fehler C2660: 'CClassFunction :: Function': Funktion akzeptiert keine 0 Argumente

line Z: enthält einen Aufruf vonFunctionohne Angabe von Parametern, wie gezeigt:pClassFunction->Function();

Der Ansatz hat nicht funktioniert, aber er hat seinen Weg zu einem @ gefundFazi: Es ist nicht möglich, einen Kopierkonstruktor zum Zuweisen eines Standardwerts für einen Funktionsparameter zu verwenden.

Ansatz 3

Und wenn ich es mit einem @ versuc Lambda:

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

, dann bekomme ich mehrere Ausgaben dieser beiden Fehler:

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
Zeile A: MethodendeklarationLinie B: Schließen} vonFunctionClass Klasse, die @ enthäFunction Method

Ursprung des Problems

Die Hauptursache des Problems scheint die Tatsache zu sein, dassCArray ist eine Klasse, die direkt von @ abgeleitet iCObject, der den Zuweisungsoperator als privat deklariert:

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

Also, wie kann ich ein leeres Array als Standardwert für den Parameter angeben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage