我正在创建一个实例Dataset :: Ptr数据,然后我需要将此实例传递给另一个方法,但是我将传递“数据”作为参数时遇到了麻烦。
数据集类定义如下:
//Definition of "Dataset" class in Datset.h
class Dataset : public Objects
{
public:
typedef boost::shared_ptr<Dataset> Ptr;
...
void foo();
在我实例化“数据集”对象的类中,我有:
void doWork(Dataset::Ptr* ds)
{
ds->foo();------>Here I get the error that foo is not defined. ds doesnt have any
}
void Function(){
Dataset::Ptr* ds;
....do something with ds....
doWork(&ds);
}
错误是boost :: shared_ptr无法更改为Dataset :: Ptr。
我做错了什么?如何正确传递实例?
由于
答案 0 :(得分:2)
Dataset::Ptr
已经是指针,Dataset::Ptr*
表示boost::shared_ptr<Dataset>* Ptr
;
ds
成为指针to boost::shared_ptr
,但未定义foo()
个函数。
更新
void doWork(Dataset::Ptr* ds)
到
void doWork(Dataset::Ptr ds)
答案 1 :(得分:0)
Dataset::Ptr*
表示指向boost::shared_ptr<Dataset>
的指针。
答案 2 :(得分:0)
由于某种原因,doWork
获取指向(共享)指针的指针。因此ds->foo()
尝试调用共享指针的foo
成员,而不是指向的对象。
您可能希望按值或const
引用:
void doWork(Dataset::Ptr ds);
doWork(ds);
但如果由于某种原因你的指针跳舞是必要的,那么你需要解除引用两次:
(*ds)->foo();