C ++-std :: vector foreach-没有重载函数的实例

时间:2019-03-20 15:48:07

标签: c++ foreach stl

我不知道这个。我最近开始使用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模板错误的任何内容

当然,任何帮助我们都会感激

纯粹

[edit:在那儿,它像炭疽一样,不需要恶意,我认为这非常令人讨厌]

for (std::vector< CharacterObject* >::iterator it = spawnedCharactersObjects.begin(); it != spawnedCharactersObjects.end(); ++it)
{
    CharacterObject* characterObject = *it;
    if (characterObject->getLevel() == level)
    {
        characterObjects.push_back(characterObject);
    }
}

1 个答案:

答案 0 :(得分:1)

这是正确的方法

#include <vector>
#include <algorithm>

class Stuff
{
};  

int main() {
    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(), [&stuffs] (Stuff *stuff) {
        stuffs.push_back(stuff);
    });
    return 0;
}

std::for_each是一种模板函数

std::for_each(Container<Type>::iterator, Container<Type>::iterator, void(Type))

(这是不正确的,但它显示了迭代器和一元函数之间的关系)。  它期望将具有一个类型为Stuff *的一个参数的函数作为第三个参数,因为list是一个包含该类型的元素的容器。两种类型必须相同。另外,如果要更改它,还必须捕获stuffs作为参考。