1

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

    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:无法将参数 1 从 'N_V::NV' 转换为 'N_V::NV *&&'

并且还不断收到错误 IntelliSence 没有重载函数的实例

4

4 回答 4

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 作为更高级的步骤,以确保正确管理对象的生命周期并且不会泄漏内存分配。

于 2014-05-02T17:58:41.440 回答
0

正如其他人指出的那样,您正在尝试在类型应该是对象指针的位置插入一个对象。另一个错误是您通过值传递向量,它应该是通过引用,否则调用者将看不到插入的效果。

          void populate( std::vector<NV*>& vNav, NV *nVess); 
于 2014-05-02T17:59:40.683 回答
0

vNav被声明为std::vector<NV*>,但您尝试将NV类型推入其中,对象不是指针。所以这是类型不匹配。您还按值传递向量,这可能不是有意的。

使用指针向量会很成问题。因为你需要手动为对象分配空间,然后记得分配它们。我建议修改代码以使用 std::vector<NV>或至少阅读有关智能指针的信息。

于 2014-05-02T17:57:53.517 回答
0

我会把你的populate函数写成

void populate( std::vector<NV>& vNav, NV& nVess); 

除非您想在向量内添加指向对象的指针。目前还不清楚你在哪里得到这个错误。您可以发布出现错误的代码吗?在push_back吗?如果是,那是因为你试图推回一个对象,但你的向量需要一个指向对象的指针。

于 2014-05-02T18:00:08.560 回答