【发布时间】:2014-01-22 21:15:04
【问题描述】:
我是 c++ 和 Qt 的新手,我正在尝试初始化一个 QVector,它是类初始化列表中的类成员,例如:
MyClass::MyClass(QWidget *parent) : QMainWindow(parent) , myVector(QVector<double>(100))
我希望 QVector 已经分配了 100 个索引,但是当我尝试读取 myVector[0] 时,我收到一个断言错误,提示“test.exe 中 0x0143bf77 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。”程序停在Qt的这一行:
inline T &QVector<T>::operator[](int i)
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::operator[]", "index out of range");
return data()[i]; }
我认为这表明我正在尝试访问尚未分配的成员,所以我想我没有正确使用初始化列表。我可以让它成为一个指针并在构造函数中创建一个new QVector(100),但我想了解什么是错误的以及如何纠正它。
【问题讨论】:
-
构造函数中的
myVector(100)就足够了 -
我在for循环中,所以
first()不会工作 -
如果我这样做
myVector(100)我得到错误:对非常量的引用的初始值必须是左值 -
@mFeinstein:显示 myVector 的声明。