繁体   English   中英

矢量迭代器不兼容

[英]vector iterators incompatible

我有一些课我想要使用大量的向量。

class Bar {
    Bar ();
    std::vector<Foo> * _grid;
    void someFunction ();
}

Bar::Bar () {
    _grid = (std::vector<Foo> *)malloc(_gridSize * sizeof(std::vector<Foo>);
    memset(_grid, 0, _gridSize * sizeof(std::vector<Foo>);
}

void Bar::someFunction () {
    int index = 0;
    std::vector<Foo> someVariable = _grid[index];
}

但是,只要我调用someFunction()_grid[index]有一些内容,我就会得到一个vector iterators incompatible错误消息。 如果向量为空,则可以。

我已经读过由无效的迭代器生成的错误消息,但是,因为此时我没有对向量进行任何更改,所以我不会在这里得到什么错误。

你几乎肯定不想动态分配向量; 只需将其作为班级成员包括在内:

class Bar { 
    std::vector<Foo> _grid;
};

如果你真的想动态分配向量,你想使用new来构造向量。 正如现在所写的那样,你可以为vector提供malloc空间,并将向量占用的所有字节设置为零。 你永远不会为分配的对象调用std::vector构造函数,因此你不能将它用作std::vector

确保你有一本很好的入门C ++书籍来学习这门语言。 如果您不了解C ++内存模型和对象模型,那么现在您可以编写正确的C ++代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM