从的std :: vector没有合适的转换功能<对象*,性病::分配器
不知道我要去哪里错了..我有这样两类这样:从的std :: vector没有合适的转换功能<对象*,性病::分配器<Object *>>”到‘对象*’存在
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
我在哪里出了错?
pointertoObjects[i]
这把指针作为vector
对象数组的起始地址,并为您提供了数组的元素i
。 (由于没有数组,只有一个矢量,如果i
非零,则会出现未定义的行为)。
如果你想要的指针指向,那么这就是向量的元素i
:
(*pointertoObjects)[i]
或范围检查和范围更小的意外类型错误:
pointertoObjects->at(i)
你应该问问自己,你是否真的需要这么多的指针;他们会变得相当混乱。
非常感谢:D工作得很棒 – Split
你有一个简单的类型不匹配。当您在pointertoObjects
上使用数组索引时,您会收到对vector<Object*>
的引用,而不是doFunction
所需的Object *
。
你可能想是这样的:doFunction((*pointertoObjects)[i]);
嗯,那我怎样才能访问指定数组索引中的对象? – Split
当你写pointertoObjects[i]
,你解引用pointertoObjects
和C++行为就像它是的vector<Object*>
阵列,所以pointertoObjects[i]
产生一个(参照)vector<Object*>
。
为了解决这个问题:
(*pointertoObjects)[i]
vector<Object*> pointedObjects = *pointertoObjects;
Object* obj = pointedObjects[i]
doFunction(obj);
编译器告诉你到底哪里出了问题。 –
我知道,但我不知道如何解决! :D – Split