使用vector push_back时没有匹配的函数调用 使用SFML及其矢量2f以及正常的C++矢量。p>

使用vector push_back时没有匹配的函数调用 使用SFML及其矢量2f以及正常的C++矢量。p>,c++,vector,graphics,sfml,C++,Vector,Graphics,Sfml,我正在使用一个名为Projectles的类,其中包含一个默认构造函数和 /////////////////////////////////// // Construct with position and velocities ////////////////////////////////// projectile::projectile(const sf::Vector2f itsPosition, const sf::Vector2f itsVel): position(itsPosi

我正在使用一个名为Projectles的类,其中包含一个默认构造函数和

///////////////////////////////////
//   Construct with position and velocities
//////////////////////////////////
projectile::projectile(const sf::Vector2f itsPosition, const sf::Vector2f itsVel):
position(itsPosition),
vel(itsVel)
{}
该呼叫来自main,形式为

if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
    {
        projectiles.push_back(sf::Vector2f(rectPos), sf::Vector2f(10,10));
    }
导致错误

no matching function for call to 'std::vector<projectile>::push_back(sf::Vector2<float>, sf::Vector2<float>)'|
调用“std::vector::push_back(sf::Vector2,sf::Vector2)”时没有匹配的函数|

我是否需要让它使用默认构造函数初始化,然后在之后编辑,或者这里缺少一些简单的内容

您的问题是将两个参数传递给push_-back方法,该方法定义为只接受一个参数。对于具有多个参数的函数,实际上没有定义,因此编译器会抱怨您正在寻找一个不存在的方法。资料来源:()

实际上,你需要做的是构造一个新的投射物,然后把它传回去


正如immibis在他对您的问题的评论中所述,还有另一种方法可以满足您的需要,emplace_back()。您可能希望尝试将该方法改为该方法。我从来没有用过那种方法,所以除此之外我没什么可说的了。资料来源:()

可能最好尝试这样做
投射物。推回(投射物(sf::Vector2f(rectPos),sf::Vector2f(10,10))
相反,我想你想要
安置
。哦,非常感谢你:我没有意识到我必须这么做…使用
安置()
.emplace\u back通过调用placement在已经可用的内存中构造实例。vector的保留内存/容量通常比使用的多,因此emplace_back只需在未使用的内存上调用类构造函数,vector只会增加其成员的大小。将push_back与move semantic结合使用(就像segevara对右值所做的那样)不会花费太多。