访问包含为该类指针向量的类的方法

时间:2014-11-15 13:23:34

标签: c++ class vector

我有一个指向对象的指针向量,定义为:

 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’

我认为我必须错误地访问该方法,但我不知道该怎么做。有没有人有任何想法?

谢谢!

3 个答案:

答案 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>>

在向量中保存引用,而不是原始指针。

实际使用哪种智能指针类型取决于您的使用案例。