【问题标题】:Passing a std::vector<sf::RectangleShape> Array in SFML在 SFML 中传递 std::vector<sf::RectangleShape> 数组
【发布时间】:2016-02-13 18:25:08
【问题描述】:

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

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

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

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

但这段代码似乎不起作用。如果你能帮助我,那就太好了。

【问题讨论】:

  • 函数声明中的(16) 是什么?你认为这意味着什么?

标签: c++ sfml


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 现在在“void setProperties(shape);”处显示“不允许使用不完整的类型”
    【解决方案3】:

    当您声明变量 shape 时,您将值 16 传递给类 std::vector&lt;sf::RectangleShape&gt; 的构造函数。构造函数是在对象的构造过程中运行的函数。 但是,当您声明函数setProperties 时,您是在确定将哪些参数传递给函数,而不是初始化这些参数。声明参数时,不能向参数的构造函数提供参数。尝试像这样声明和定义你的函数:

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

    还值得注意的是,由于您是按值传递,因此将向量的副本而不是原始向量传递给函数...如果您希望函数影响shape的值,您应该而是通过引用传递它。

    【讨论】:

      【解决方案4】:

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

      我把void改成了std::vector&lt;sf::RectangleShape&gt;

      现在是这样的:

      std::vector<sf::RectangleShape> shape(16);  
      shape = setProperties(shape);  
      
      std::vector<sf::RectangleShape> setProperties(std::vector<sf::RectangleShape> shapes)
      { ... }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多