将类对象推回到向量中

时间:2014-05-02 17:54:37

标签: c++ object vector push-back c2664

我有一个接收类对象的向量,但是当我尝试将我创建的对象推回到向量中时,我遇到了这些问题并且不知道如何解决它。有人可以帮帮我吗?

    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没有重载函数的实例

4 个答案:

答案 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吗?如果是,那么这是因为你试图推回一个对象,但你的向量需要一个指向对象的指针。