Como inicializar o valor padrão de um parâmetro de função CArray <CClass *> com um CArray vazio?
Eu sei que eu poderia fazer isso melhor comstd::vector
, mas o aplicativo com o qual estou mexendo já tem váriosCArray
parâmetros em muitas funções relacionadas ... e não vou alterá-las todas no momento!
Eu simplesmente quero definir um vazioCArray<CClass*>
- matriz deponteiros paraCClass
então o problemanão pode ser noCClass
construtor - como o valor padrão de um parâmetro de função.
Abordagem 1
Se eu tentar fazer isso comoperador de atribuição econstrutor padrão:
void Function(CArray<CClass*> parameter = CArray<CClass*>());
Eu recebo o erro:
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> ]
Abordagem 2
Eu também tentei com umcopiar construtor:
void Function(CArray<Class*> parameter(CArray<CClass*>()));
Eu recebi os erros:
>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
linha X: contém uma chamada que fornece o parâmetro para Function, como mostrado:pFunctionClass->Function(parameter);
1> CFunctionClass.cpp (linha Y): erro C2511: 'void CFunctionClass :: Function (CArray)': função de membro sobrecarregada não encontrada em 'CShoePlaceDoc' 1> com 1> [1> TYPE = CClass * 1>] 1> FunctionClass.h (linha A): veja a declaração de 'CFunctionClass'
a linha Y contém oFunction
cabeçalho de implementação, como mostrado: `void CFunctionClass :: Function (parâmetro CArray)1> File.cpp (linha Z): erro C2660: 'CClassFunction :: Function': a função não aceita 0 argumentos
linha Z: contém uma chamada paraFunction
sem fornecer parâmetros, como mostrado:pClassFunction->Function();
A abordagem não funcionou, mas conseguiu chegar a umconclusão: Não é possível usar um construtor de cópia para atribuir um valor padrão para um parâmetro de função.
Abordagem 3
E se eu tentar com umlambda:
void Function(CArray<CClass*> parameter = [] () -> CArray<CClass*>{ return CArray<CClass*> (); } );
, então receberei várias saídas desses dois erros:
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
linha A: declaração de métodolinha B: fechamento}
doFunctionClass
classe que contémFunction
métodoOrigem do problema
A causa raiz do problema parece ser o fato de queCArray
é uma classe diretamente derivada deCObject
, que declara o operador de atribuição como privado:
class AFX_NOVTABLE CObject
{
//...
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
//...
}
Então, como posso fornecer uma matriz vazia como valor padrão para o parâmetro?