2014-04-25 63 views
0

在过去的几天里,我一直在这里待了几个小时,并且尽可能地搜索到了最好的结果,因为我可以在线获得对此的回答,并且我被卡住了。就在我认为MSDN对我有答案时,我仍然遇到问题。我有一个标题InstalledPrograms.hclass InstalledProgram{}C++ std :: list插入问题

三个构造

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

我宣布名单:list<InstalledProgram> ProgramList;

它传递给这个函数:

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

这样

GetUserUninstallKeyPrograms(Wow64UninstallKey, ClassKey, ProgramList); 

做一些的东西,我可以在代码中的一个点,我需要插入一个新的实例进入榜单:

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

我已经遇到的问题是,“”在插入前显示“没有重载函数的实例与参数列表匹配”,并且围绕InstalledProgram(Name)的圆括号显示“No 参数类型(System :: String ^)”的构造函数的实例。

我不明白为什么。

任何帮助,将不胜感激。

回答

0

paramProgramList是list<InstalledProgram>但你要插入new InstalledProgram(Name)这是一个指针InstalledProgram。如果InstalledProgram是可复制的,则可以删除单词new

至于“没有参数类型(System :: String ^)的构造函数实例”;我无法从我看到的代码中解释,除非CONSTRUCTOR未定义。

此外,虽然没有什么技术上的错误和写入插入你的方式,这将是一个有点更简洁:

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

我没有一个拷贝构造函数。我不认为我会用一个。但是我添加了一个,它仍然拒绝接受String ^的参数Name。我最终不得不创建一个空的新实例,手动设置该值,然后在将其传递给push_back之前进行复制。 –

+0

我不能确定没有看到InstalledProgram的整个定义,但如果这是真的,我认为这意味着CONSTRUCTOR没有定义。 – dlf