2014-04-25 2 views
0

Je suis là depuis quelques heures ces deux derniers jours et je recherche du mieux que je peux en ligne pour trouver une réponse à cette question et je suis bloqué. Juste quand je pense que MSDN a une réponse pour moi, j'ai toujours un problème. J'ai un en-tête InstalledPrograms.h avec class InstalledProgram{}.C++ std :: liste les problèmes avec insert

Trois Constructors

#ifdef CONSTRUCTOR 
    InstalledProgram::InstalledProgram(); 
    InstalledProgram::InstalledProgram(String^ p_DisplayName); 
    InstalledProgram::InstalledProgram(String^ p_DisplayName, String^ p_ParentDisplayName, string p_Version); 
#endif 

Je déclare la liste: list<InstalledProgram> ProgramList;

passer à cette fonction:

list<InstalledProgram> InstalledProgram::GetUserUninstallKeyPrograms(RegistryKey ^CurUserInstallKey, RegistryKey^ HkeylmRoot, list<InstalledProgram> paramProgramList) 

comme celui-ci

GetUserUninstallKeyPrograms(Wow64UninstallKey, ClassKey, ProgramList); 

Faites quelques choses et j'arrive à un point dans le code que je dois insérer une nouvelle instance dans la liste:

paramProgramList.insert(paramProgramList.end(), new InstalledProgram(Name));

Le problème que j'ai HAVING est que le « » avant insertion indique "Aucune instance de fonction surchargée ne correspond à la liste d'arguments", et les parenthèses autour de InstalledProgram(Name) montrent "No instance de constructeur pour le type d'argument (System :: String ^)".

Je ne comprends pas pourquoi.

Toute aide serait appréciée.

Répondre

0

paramProgramList est un list<InstalledProgram> mais vous essayez d'insérer new InstalledProgram(Name) qui est un pointeur à un InstalledProgram. Si InstalledProgram est copiable, vous pouvez simplement supprimer le mot new. Comme pour "Aucune instance de constructeur pour le type d'argument (System :: String ^)"; que je ne peux pas expliquer à partir du code que je vois à moins que CONSTRUCTOR ne soit pas défini.

De plus, alors il n'y a rien de mal à écrire sur le plan technique l'insertion, la façon dont vous avez fait, ce serait un peu plus succinct:

paramProgramList.push_back(InstalledProgram(Name)); 
+0

je n'avais pas un constructeur de copie. Je ne pensais pas en utiliser un. Mais j'ai ajouté un et il a toujours refusé d'accepter le paramètre Name qui est String ^. J'ai fini par devoir créer une nouvelle instance vide, définir la valeur manuellement et ensuite faire une copie avant de la passer à push_back. –

+0

Je ne peux pas dire avec certitude sans voir toute la définition de InstalledProgram, mais si cela est vrai, je pense que cela doit signifier que CONSTRUCTOR n'est pas défini. – dlf