【问题标题】:Vector pointers and passing objects by reference in C++在 C++ 中,向量指针和通过引用传递对象
【发布时间】:2014-12-03 21:26:53
【问题描述】:

我有以下课程:

class Database
{
private:
    vector<myObject*> m_vectorObj;

public: 
    void addObject(myObject &passObj)
}

我正在尝试这样做:

void Database::addObject (myObject &passObj)
{
    m_vectorObj.push_back(passObj);
}

但是给我错误“没有要调用的匹配函数”,我怎样才能使它工作并传递对象并存储指针?

【问题讨论】:

  • m_vectorObj.push_back(&amp; passObj),但是最好按照 Vlad 的建议更改对指针的引用。

标签: c++ pointers object vector reference


【解决方案1】:

您正在传递对指针类型的引用,它不等于您拥有的任何原型调用。

如果要添加指针,请将代码更改为接受指针对象:

void Database::addObject (myObject * passObj)
{
   m_vectorObj.push_back(passObj);
}

//somewhere:
Database db;
db.addObject(new myObject);

请注意,引用通常用于修改传递的参数

【讨论】:

    【解决方案2】:

    首先问问自己是否真的需要使用指针

    如果你这样做,那么你有 2 个选择。

    1: 你只是在passObj 之前缺少&amp;

    m_vectorObj.push_back(&passObj);
                          ^
    

    2:改变你的功能(从引用到指针)

    void Database:addObject (myObject *passObj)//pointer to myObject instead of reference
    {
        m_vectorObj.push_back(passObj);
    }
    

    我根本不会使用指针,但我建议你将它们封装到std::unique_ptr

    【讨论】:

    • 选项 2 更好,选项 2 +1
    • 您必须小心std::unique_ptr,因为您不能将push_back 放入向量中(它不可复制),而只能使用std::move-it。
    • 谢谢您申请选项 2 :)
    • @IzonFreak 很高兴我帮助了你。顺便说一句,您应该接受答案
    • 我现在给你 +1 -1 unique_ptr。传递 unique_ptr 将意味着 passObj 更改所有者,但情况可能并非如此。当m_vectorObj 将被销毁时,包裹passObj 将随之销毁。
    【解决方案3】:

    范围解析运算符是 '::' 而不是 ':'。将 void DataBase:addObject 更改为 DataBase::addObject。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2012-03-03
      相关资源
      最近更新 更多