【发布时间】:2019-08-11 09:23:18
【问题描述】:
我想不出这个;我最近开始使用std::for_each,但是这个很难解决
我不断收到以下代码的错误:
**no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=CharacterObject *, _Alloc=std::allocator<CharacterObject *>]" matches the argument list**
代码:
class Stuff
{
};
std::vector< Stuff* > list;
list.push_back(new Stuff());
list.push_back(new Stuff());
list.push_back(new Stuff());
std::vector< Stuff* > stuffs;
std::for_each(list.begin(), list.end(), [this,level, stuff](Stuff &stuff)
{
... // some conditions here
stuffs.push_back(stuff); << error
stuffs.push_back(&stuff); << also throws an error
});
我尝试了许多不同的组合,但很难找出任何 STL 模板错误
任何帮助当然非常感谢
纯色
[编辑:在那里,像 acharm 一样工作,不需要恶意,我认为这非常令人讨厌]
for (std::vector< CharacterObject* >::iterator it = spawnedCharactersObjects.begin(); it != spawnedCharactersObjects.end(); ++it)
{
CharacterObject* characterObject = *it;
if (characterObject->getLevel() == level)
{
characterObjects.push_back(characterObject);
}
}
【问题讨论】:
-
你正试图将一个具体的对象推入一个指针向量中。
characterObject.getLevel()清楚地表明characterObject是一个对象;不是指针。你的向量对象类型是_Ty=CharacterObject *,它是一个指针类型。它们不一样。 -
好吧,如果你这样看,我会用普通的good old for(...
-
@phil123456 1) 请提供minimal reproducible example。您正在尝试捕获不存在的变量
stuff,而不是捕获stuffs,您正在尝试push_back。 2)for (std::vector< CharacterObject* >::iterator it = spawnedCharactersObjects.begin(); it != spawnedCharactersObjects.end(); ++it)可以改为for (auto& elem : spawnedCharactersObjects)。 -
如果您愿意,可以称之为恶意,但是当您发布的代码不是产生您要修复的错误的代码时,我们无法帮助您,这就是为什么请您提供@ 987654325@