std :: vector <object *,=“”std :: allocator <object =“”* =“”>&gt;“to”Object *“存在</object>

时间:2013-05-28 16:11:14

标签: c++ pointers

不知道我哪里错了..我有两个类似的那样:

class One
{
    public:
    vector<Object*> myObjects;
};

class Two
{
    public:
    vector<Object*> * pointertoObjects;
};

然后我想创建一个从pointertoObjects到myObjects的指针,我这样做:

pointertoObjects = &myObjects;

但是当我尝试访问传递元素时:

void doFunction(Object * object);
doFunction(pointertoObjects[i])

它给了我一个错误:

Error: no suitable conversion function from std::vector<Object *, std::allocator<Object *>>" to "Object *" exists

我哪里出错?

4 个答案:

答案 0 :(得分:5)

pointertoObjects[i]

这会将指针视为vector个对象数组开头的地址,并为您提供该数组的元素i。 (由于没有数组,只有一个向量,如果i非零,您将得到未定义的行为。)

如果你想要指针指向的向量的元素i,那就是:

(*pointertoObjects)[i]

或使用范围检查,减少意外类型错误的范围:

pointertoObjects->at(i)

你应该问自己是否真的需要这么多指针;他们会很困惑。

答案 1 :(得分:1)

当您编写pointertoObjects[i]时,您正在解除引用pointertoObjects并且C ++的行为类似于vector<Object*>的数组,因此pointertoObjects[i]会产生(引用){{1 }}

解决这个问题:

vector<Object*>

答案 2 :(得分:0)

你有一个简单的类型不匹配。在pointertoObjects上使用数组索引时,您会获得对vector<Object*>的引用,而不是Object *所需的doFunction

你可能想要这样的东西:doFunction((*pointertoObjects)[i]);

答案 3 :(得分:0)

vector<Object*> pointedObjects = *pointertoObjects;
Object* obj = pointedObjects[i]
doFunction(obj);