在SFML中传递std :: vector <sf :: rectangleshape>数组

时间:2016-02-13 18:25:09

标签: c++ sfml

我正在研究一个SFML项目,我必须将一个RectangleShapes数组传递给一个void函数。

std::vector<sf::RectangleShape> shape(16);  
void setProperties(shape);  

该功能尚未制作,但Visual Studio虽然给了我一个错误。

void setProperties(std::vector<sf::RectangleShape> shapes(16))
{
}

但是这段代码似乎没有用。如果你能帮助我,那就太好了。

4 个答案:

答案 0 :(得分:0)

void setProperties(std::vector<sf::RectangleShape> shapes(16))

您有语法错误,因为参数应该由类型声明和参数的可选名称组成,但是您有一个无关的(16)

void setProperties(std::vector<sf::RectangleShape> shapes)

但是这会将std::vector的副本传递给该函数,这可能不是您想要的(因为它很昂贵)。如果您不需要修改向量,最好传递引用或const引用,例如:

void setProperties(const std::vector<sf::RectangleShape>& shapes)

答案 1 :(得分:0)

(16)调用std :: vector的构造函数。您无法在函数定义中使用函数调用,因此您需要更改:

document.querySelector('button.getscript').addEventListener('click', function(e){
    var script = document.createElement("script");
    script.type = "text/javascript";

    script.src = "//massage.book.me/iframe/pm_loader_v2.php?width=960&url=//massage.book.me&theme=bootstrap__square_rainbow__colored_light&layout=bootstrap__square_rainbow&timeline=modern&mode=auto&mobile_redirect=0&hidden_steps=event,unit&event=1&unit=1";

    document.getElementsByTagName("head")[0].appendChild(script);
    e.preventDefault();
})

void setProperties(std::vector<sf::RectangleShape> shapes(16)){ ... }

答案 2 :(得分:0)

当您声明变量shape时,您将值16传递给类std::vector<sf::RectangleShape>的构造函数。构造函数是在构造对象期间操作的函数。 但是,当您声明函数setProperties时,您将确定将哪些参数传递给函数而不是初始化这些参数。在声明参数的构造函数时,不能为其提供参数。尝试声明和定义您的函数,如下所示:

void setProperties(std::vector<sf::RectangleShape> shapes)
{
    // Set properties here.
}

值得注意的是,由于你是通过值传递的,因此矢量的副本将传递给函数而不是原始矢量...如果你希望函数影响{{的值1}},你应该通过引用传递它。

答案 3 :(得分:0)

我现在修好了。我不知道它是否是一个很好的解决方案,但它对我有用。

我将void更改为std::vector<sf::RectangleShape>

现在就是这样:

std::vector<sf::RectangleShape> shape(16);  
shape = setProperties(shape);  

std::vector<sf::RectangleShape> setProperties(std::vector<sf::RectangleShape> shapes)
{ ... }