C ++:使用“typedef”定义的类作为参数

时间:2013-11-07 12:04:51

标签: c++ object boost instance typedef

我正在创建一个实例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。

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

由于

3 个答案:

答案 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();