出于某种原因,在我的类里面调整这个二维 vector 的大小不起作用。感谢您的帮助!
..
Map::Map(const unsigned int& w,
const unsigned int& h,
const unsigned int& s)
: width(w), height(h), size(s)
{
squares.resize(width);
for (unsigned int i = 0; i < width; ++i)
{
squares[i].resize(height); // error here
for (unsigned int j = 0; j < height; ++j)
{
squares[i][j] = Square(sf::Vector2f(i * size, j * size));
}
}
}
std::vector<std::vector<Square>> squares;
..
一些错误信息:
c:\mingw\bin..\lib\gcc\mingw32\4.6.2\include\c++\bits\STL_uninitialized.h|481|由 »static void std::__uninitialized_default_n_1<TrivialValueType>::_uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = Square*, _Size = unsigned int, bool _TrivialValueType = false]«|
c:\mingw\bin..\lib\gcc\mingw32\4.6.2\include\c++\bits\STL_uninitialized.h|529|实例化 »void std::__uninitialized_default_n(_ForwardIterator, _Size) [with _ForwardIterator = Square*, _Size = unsigned int]«|
最佳答案
当您使用 vector.resize(n) 和 n > vector.size() 时,您要求它创建 n - vector.size() 新元素。 Vector 需要默认构造它们,因为他不知道要使用什么参数。如果它们不是默认可构造的,则调整大小将失败。
但是,如果您不希望 Square 成为默认可构造的,您可以将失败的行更改为 vector.reserve() - 这只会确保有足够的空间容纳新元素,但不会实际创建它们。然后你可以使用
在循环中一个一个地创建它们squares[i].emplace_back(sf::Vector2f(i * size, j * size));
哦,顺便说一下,通过引用传递基元的性能不是最理想的。按值传递它们,除非您需要它们作为输出参数。
关于c++ - 调整二维 vector 的大小 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494540/