C++ C++;:以“通过”;typedef";将类定义为参数

C++ C++;:以“通过”;typedef";将类定义为参数,c++,object,boost,instance,typedef,C++,Object,Boost,Instance,Typedef,我正在创建一个实例Dataset::Ptr data,然后我需要将这个实例传递给另一个方法,但在将“数据”作为参数传递时遇到了问题 Dataset类的定义如下: //Definition of "Dataset" class in Datset.h class Dataset : public Objects { public: typedef boost::shared_ptr<Dataset> Ptr; ... void foo(); 错误在于bo

我正在创建一个实例Dataset::Ptr data,然后我需要将这个实例传递给另一个方法,但在将“数据”作为参数传递时遇到了问题

Dataset类的定义如下:

//Definition of "Dataset" class in Datset.h
class Dataset : public Objects
{
public:
    typedef boost::shared_ptr<Dataset> Ptr;

...

        void foo(); 
错误在于boost::shared_ptr无法更改为Dataset::ptr

我做错了什么?如何正确地传递实例


谢谢

Dataset::Ptr
已经是一个指针,
Dataset::Ptr*
表示
boost::shared_Ptr*Ptr
ds
成为指向boost::shared_ptr
的指针,它没有定义
foo()
函数

更新

void doWork(Dataset::Ptr* ds)


Dataset::Ptr*
意味着指向
boost::shared_Ptr
的指针。出于某种原因,
doWork
将指针指向(共享)指针。因此
ds->foo()
尝试调用共享指针的
foo
成员,而不是指向的对象

您可能希望通过值或
const
reference传递共享指针:

void doWork(Dataset::Ptr ds);
doWork(ds);
但如果出于某种原因需要跳指针舞,则需要取消引用两次:

(*ds)->foo();
void doWork(Dataset::Ptr ds);
doWork(ds);
(*ds)->foo();