【问题标题】:Is there a simple way to call a constructor on a vector of objects? [closed]有没有一种简单的方法可以在对象向量上调用构造函数? [关闭]
【发布时间】:2019-11-21 21:27:11
【问题描述】:

我正在使用 SFML 用 C++ 编写一个小项目,但遇到了一个问题。我想画几条线,我想在运行我的程序时改变它们的数量(我想要最多 50 条线)。所以我想,我会使用 std::vector,但我需要在每个 line 对象上调用非默认构造函数,而且我找不到比在循环中执行它更简单的方法(我什至不知道我是否应该无论如何都要这样做)。我试过这个:

std::vector<sf::VertexArray> lines(50, sf::VertexArray(2, sf::Lines));

但它不起作用。 (我可能错了,直到 C++ 11 才出现?)。 我问如何做这样的事情(也在调整矢量大小时)或者我应该找到另一种存储这些行的方法?我使用的是 sf::VertexArray,因为我真的需要一条线描述为 2 点,而不是矩形。

【问题讨论】:

  • “它不起作用”是什么意思?你得到什么错误?
  • 你真的尝试过使用std::vector&lt;sf::VertexArray&gt; lines(50, sf::VertexArray(2, sf::Lines));吗?除非sf::VertexArray 不可复制,否则它应该可以正常工作。
  • 下次用科学的方法。所以你的尝试没有奏效。是矢量的错吗?尝试使用简单的整数向量。有用?是的,所以问题出在您的 VertexArray ctor...然后您知道这与向量无关。这项技术将使您免于对正在发生的事情一无所知。 :)

标签: c++ vector sfml


【解决方案1】:

根据文档:

https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1VertexArray.php#a4bb1c29a0e3354a035075899d84f02f9

VertexArray 的构造函数如下:

sf::VertexArray::VertexArray    (   PrimitiveType   type,
std::size_t     vertexCount = 0 
)   

所以第一个参数应该是 PrimitiveType,第二个是计数。你有相反的方式。所以改变:

std::vector<sf::VertexArray> lines(50, sf::VertexArray(2, sf::Lines));

到:

std::vector<sf::VertexArray> lines(50, sf::VertexArray(sf::Lines, 2));

否则你的代码看起来不错。

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2021-05-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多