1

インスタンス Dataset::Ptr データを作成していて、このインスタンスを別のメソッドに渡す必要がありますが、「データ」を引数として渡すのに問題があります。

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>* Ptr、; 関数が定義されていないdsポインタになります。to boost::shared_ptrfoo()

アップデート

void doWork(Dataset::Ptr* ds)

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

Dataset::Ptr*へのポインタを意味しますboost::shared_ptr<Dataset>

于 2013-11-07T12:07:04.470 に答える
0

何らかの理由でdoWork、(共有) ポインターへのポインターを取ります。そのため、指すオブジェクトではなく、共有ポインターのメンバーを呼び出そds->foo()うとします。foo

constおそらく、共有ポインタを値または参照で渡したいでしょう。

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

しかし、何らかの理由でポインター ダンスが必要な場合は、2 回逆参照する必要があります。

(*ds)->foo();
于 2013-11-07T12:08:50.037 に答える