我有一个接收类对象的向量,但是当我尝试将我创建的对象推回到向量中时,我遇到了这些问题并且不知道如何解决它。有人可以帮帮我吗?
void populate( std::vector<NV*> vNav, NV *nVess);
创建对象类
NV vPB;
匹配的对象类变量
vPB.name = namE;
vPB.type = typE;
vPB.length = lengtH;
vPB.speed = speeD;
vPB.range = rangE;
vPB.serialNum = serialNuM;
vPB.serialNum = beaM;
vPB.displacement = displacemenT;
vPB.draft = drafT;
vPB.isActive = isActivE;
namE = name;
typE = type;
lengtH = length;
speeD = speed;
rangE = range;
serialNuM = serialNum;
beaM = beam;
displacemenT = displacement;
drafT = draft;
isActivE = isActive;
vNav.push_back(vPB);
不断收到错误错误C2664:无法从&#39; N_V :: NV&#39;转换参数1到&#39; N_V :: NV *&amp;&amp;&#39;
并且还不断收到错误IntelliSence没有重载函数的实例
答案 0 :(得分:2)
向量期望指向对象的指针,而您推回的vPB不是指向对象的指针,而是对象本身。
您可以采取的最低限度是:
NV* vPB = new NV();
vPB->name = namE;
... and similarly for all the members you need to initialize ...
vNav.push_back(vPB);
其次,vNav向量仅存在于该函数的上下文中,因为它是通过值传递的。您可能希望通过引用获取参数。这意味着将您的功能签名更改为:
void populate( std::vector<NV*>& vNav, NV *nVess);
最后,如果你能提供帮助,不建议使用裸指针。尝试将shared_ptr和unique_ptr视为更高级的步骤,以确保正确管理对象的生命周期并且不会泄漏内存分配。
答案 1 :(得分:0)
vNav
被声明为std::vector<NV*>
,但您尝试将NV
类型推入其中,对象不是指针。所以这是一种类型不匹配。您还可以按值传递矢量,这可能不是预期的。
使用指针向量将是非常有问题的。因为您需要手动为对象分配空间,然后记住分配它们。我建议修改代码以使用std::vector<NV>
或至少阅读有关智能指针的内容。
答案 2 :(得分:0)
正如其他人指出的那样,您正在尝试插入一个对象指针所在的对象。另一个错误是你通过值传递矢量,它应该是引用,否则调用者将看不到插入的效果。
void populate( std::vector<NV*>& vNav, NV *nVess);
答案 3 :(得分:0)
我会将您的populate
函数写为
void populate( std::vector<NV>& vNav, NV& nVess);
除非您想要添加指向矢量内对象的指针。
目前尚不清楚你在哪里得到这个错误。您可以在出现错误的地方发布代码吗?它在push_back
吗?如果是,那么这是因为你试图推回一个对象,但你的向量需要一个指向对象的指针。