访问类 QList 指针的成员
Accessing members of a class QList Pointer
>我有一个项目,我使用QList
来存储一个名为RespirationTest
的类的实例。使用动态内存时,访问RespirationTest
成员很容易,但是由于我将QList
切换为指针,因此我遇到了问题
//class declaration
class RespirationTest: public QListWidgetItem
{
public:
RespirationTest();
~RespirationTest();
public slots:
double GetAmplitude() { return _amplitude; }
private:
double _amplitude;
}
问题就在这里,当我尝试访问我的QList
对象的成员时(当respTest
是QList
时曾经工作(
//MainWindow
QList<RespirationTest> * respTests;
respTests = new QList<RespirationTest>;
void MainWindow::on_load_button_clicked()
{
RespirationTest *currTest = new RespirationTest;
respTests->push_back(*currTest);
qDebug() << "ampl" << i << ": " << respTests[i].GetAmplitude(); // no member named 'GetAmplitude'
}
快速修复:改用.at(int idx)
:
qDebug() << "ampl" << i << ": " << respTests->at(i).GetAmplitude();
使用operator[]
的问题在于您访问指针的内存而不是访问底层QList
:
respTests[i] // returns the QList<> instance at `i` instead
// of a `RespirationTest` object
所以如果你想继续使用[]
,你需要通过使用[]
或.at()
进一步访问第i
个元素:
qDebug() << "ampl" << i << ": " << respTests[0].at(i).GetAmplitude();
如果您真的必须这样做,我强烈建议您使用.at()
。否则,根本不要使用指针,因为它会使问题过于复杂,并且可能会泄漏内存。此外,请避免QList<>
,请改用QVector
。
因为respTests
是一个指针,所以你需要使用->
而不是.
qDebug() << "object at " << i << ": " << respTests->at(i).GetAmplitude();
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制