不知道我哪里错了..我有两个类似的那样:
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
我哪里出错?
答案 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);