我有一个指向对象的指针向量,定义为:
std::vector<queuedImage*> imgBuffer;
我通过引用将它传递给类的构造函数:
processThread::processThread(std::vector<queuedImage*> &queueRef);
在类processThread中我定义:
std::vector<queuedImage*> *q;
在构造函数中,我进行了赋值:
q = &queueRef;
当我访问已经填充了对象的向量元素时,向量的大小如下所示:
int qSize = q->size();
这使我认为这应该是有效的:
q[0]->getData()
其中getData是queuedImage的成员。
然而,当我编译它时,它显然无效为:
error: base operand of ‘->’ has non-pointer type ‘std::vector<queuedImage*>’
但是当我使用的时候。而不是运营商:
q[0].getData()
我收到编译错误:
error: ‘class std::vector<queuedImage*>’ has no member named ‘getData’
我认为我必须错误地访问该方法,但我不知道该怎么做。有没有人有任何想法?
谢谢!
答案 0 :(得分:2)
当您执行q[0]
时,您没有访问向量的第一个元素,您实际上是在取消引用指针。 q[0]
== *q
==向量。
您要做的是在[0]
指向的向量上调用q
。为此,您必须先取消引用q
:
(*q)[0]->getData()
答案 1 :(得分:0)
这应该是
(*q)[0]->getData();
但是当你已经通过引用接受向量时,为什么你不必要地创建指向vector的指针。
答案 2 :(得分:0)
除了修复语法错误以解除引用不必要的向量指针
之外 (*q)[0]->getData()
认真 应考虑使用smart pointers,例如
std::vector<std::unique_ptr<queuedImage>>
或
std::vector<std::unique_ptr<queuedImage>>
在向量中保存引用,而不是原始指针。
实际使用哪种智能指针类型取决于您的使用案例。