1

我正在创建一个实例 Dataset::Ptr data 然后我需要将此实例传递给另一个方法,但是我无法将“数据”作为参数传递。

Dataset 类定义如下:

//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。

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

谢谢

4

3 回答 3

2

Dataset::Ptr已经是一个指针,Dataset::Ptr*意味着boost::shared_ptr<Dataset>* Ptrds变成一个to boost::shared_ptr没有foo()定义函数的指针。

更新

void doWork(Dataset::Ptr* ds)

void doWork(Dataset::Ptr ds)
于 2013-11-07T12:06:39.490 回答
0

出于某种原因,doWork需要一个指向(共享)指针的指针。所以ds->foo()尝试调用foo共享指针的成员,而不是指向的对象。

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

void doWork(Dataset::Ptr ds);
doWork(ds);

但是如果由于某种原因你的指针舞蹈是必要的,那么你需要取消引用两次:

(*ds)->foo();
于 2013-11-07T12:08:50.037 回答
0

Dataset::Ptr*表示指向boost::shared_ptr<Dataset>.

于 2013-11-07T12:07:04.470 回答