出于某种原因,在我的班级中调整这个二维向量的大小不起作用。谢谢你的帮助!
..
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 \包括\ C ++ \比特\ stl_uninitialized.h | 481 | instanziiert von»static void std :: __ uninitialized_default_n_1&lt; TrivialValueType&gt; :: _uninit_default_n(_ForwardIterator,_Size)[with _ForwardIterator = Square *,_ Size = unsigned int,bool _TrivialValueType = false]«|
C:\ MinGW的\ BIN .. \ lib中\ GCC \的mingw32 \ 4.6.2 \包括\ C ++ \比特\ stl_uninitialized.h | 529 | instanziiert von»void std :: __ uninitialized_default_n(_ForwardIterator,_Size)[with _ForwardIterator = Square *,_ Size = unsigned int]«|
答案 0 :(得分:1)
当你vector.resize(n)和n&gt; vector.size()你要求它创建n - vector.size()新元素。 Vector需要默认构造它们,因为他不知道要使用什么参数。如果它们不是默认构造,则调整大小失败。
但是,如果您不希望Square是默认构造的,您可以将失败的行更改为vector.reserve() - 这只会确保有足够的空间用于新元素,但实际上并不创建它们。然后,您可以使用
在循环中逐个创建它们squares[i].emplace_back(sf::Vector2f(i * size, j * size));
哦,顺便通过引用传递基元的方式具有次优性能。除非您需要它们作为输出参数,否则按值传递它们。