2014-12-03 77 views
0

我有以下类:向量指针并通过引用传递对象。 C++

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

public: 
    void addObject(myObject &passObj) 
} 

我试图做到这一点:

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

不过是给我的错误“找不到匹配函数来调用”,我怎样才能使这个工作并传递对象并存储指针?

+0

'm_vectorObj.push_back(PA ssObj)',但是最好是改变对指针的引用,正如弗拉德所建议的那样。 – doc 2014-12-03 21:35:03

回答

0

首先,问问自己,如果你真的需要使用指针

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

1:你只是缺少&之前passObj

m_vectorObj.push_back(&passObj); 
        ^

2:更改您的功能(从参考指针)

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

我不会用指针可言,但我建议你到encapsulate'em为std::unique_ptr

+0

选项2更好,+1选项2 – doc 2014-12-03 21:40:40

+2

你必须要小心'的std :: unique_ptr',因为你不能'push_back'入载体(它不是拷贝构造),但只有'std :: move'-它。 – vsoftco 2014-12-03 22:02:46

+0

谢谢你将申请选项2 :) – IzonFreak 2014-12-03 22:38:40

0

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

+0

改变了它,对不起 – IzonFreak 2014-12-03 21:41:23

2

要传递到指针类型,它不等于任何原型叫你有一个参考。

如果你想添加的指针更改代码接受指针对象:

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

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

注意,引用通常彪为modyfiing传递的参数

相关问题