繁体   English   中英

没有来自std :: vector的合适转换函数 <Object *, std::allocator<Object *> &gt;“到“对象*”存在

[英]No suitable conversion function from std::vector<Object *, std::allocator<Object *>>“ to ”Object *" exists

不知道我要去哪里错..我有两个这样的类:

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)

您应该问自己,是否真的需要那么多指针? 他们会变得很混乱。

在编写pointertoObjects[i] ,您将取消引用pointertoObjects而C ++的行为就像是vector<Object*>的数组,因此, pointertoObjects[i]产生了对vector<Object*>引用。

要解决此问题:

(*pointertoObjects)[i]

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM