C++ C++;:以“通过”;typedef";将类定义为参数
我正在创建一个实例Dataset::Ptr data,然后我需要将这个实例传递给另一个方法,但在将“数据”作为参数传递时遇到了问题 Dataset类的定义如下: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
//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();