代码之家  ›  专栏  ›  技术社区  ›  James Zaghini Gandalf

将指向对象的指针向量传递给另一个对象的成员函数的问题

c++
  •  1
  • James Zaghini Gandalf  · 技术社区  · 14 年前

    我有一个指向鼠标对象的向量,叫做“鼠标”。 我把老鼠交给猫参考。

    vector <Mouse*> mice;
    Cat * c;
    
    c->lookForMouse(&mice);
    

    下面是lookformouse()成员函数

    void Cat::lookForMouse(vector <Mouse*> *mice)
    {
      ...
    }
    

    现在来解决这个问题!在上述功能中,我似乎无法访问我的鼠标。下面这个不行

    mice[i]->isActive();
    

    我收到的错误消息建议使用MICE[i].isactive(),但这会引发一个错误,说明isactive()不是std::vector<ty>的成员…

    但这是可行的…

    vector <Mouse*> miceCopy = *mice;
    miceCopy[i]->isActive();
    

    我知道我不应该在这里创建另一个老鼠载体,它打败了通过引用传递它的整个点(如果我错了请告诉我)。

    为什么我不能做老鼠[i]->isActive()我应该做什么?

    谢谢你的时间和帮助:d

    詹姆斯。

    3 回复  |  直到 14 年前
        1
  •  4
  •   sbi    14 年前

    问题是你是 通过A 参考 但A 指针 .
    引用将像对象一样传递:

    c->lookForMouse(mice);
    

    取它的函数如下:

    void Cat::lookForMouse(vector <Mouse*> &mice)
    

    注意,哑指针的容器容易泄漏。例如:

    void f()
    {
       std::vector<Mouse*> mice = g();
       h(); // throws!
    
       cleanup(mice); // deletes objects in vector, is never called if h() throws
    }
    
        2
  •  2
  •   Matti Virkkunen    14 年前

    mice[i] 将索引指向向量的指针。要从向量中获取项,需要首先取消对指向该项的指针的引用,请执行以下操作:

    (*mice)[i]->isActive()
    

    或者更好的方法是将向量作为引用而不是指针传递。

        3
  •  0
  •   Andrey    14 年前
    (*mice)[i]->isActive();