【问题标题】:C++ - std::vector foreach - no instance of overloaded functionC++ - std::vector foreach - 没有重载函数的实例
【发布时间】: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&lt; CharacterObject* &gt;::iterator it = spawnedCharactersObjects.begin(); it != spawnedCharactersObjects.end(); ++it)可以改为for (auto&amp; elem : spawnedCharactersObjects)
  • 如果您愿意,可以称之为恶意,但是当您发布的代码不是产生您要修复的错误的代码时,我们无法帮助您,这就是为什么请您提供@ 987654325@

标签: c++ foreach stl


【解决方案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 作为参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    相关资源
    最近更新 更多