0

どちらboost::scoped_ptrboost::shared_ptrを使用すると、またはエラーが発生します

1> * \algomanager.cpp(28): エラー C2064: 項は 1 つの引数を取る関数に評価されません

私はこのようなコードを持っています。. .

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};

私は何が欠けていますか?ありがとう。

4

2 に答える 2

6

私の神話上の魔法のデバッグのガラスの球は、あなたがこのようなことをしていることを教えてくれます:

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};

次のようなメンバー初期化子を使用する必要があります。

X() : preProcess(...){}

または.reset、次のようなポインタを割り当てることはできないため、使用してください。

X() { preProcess.reset(...); }

ただし、最初のオプションを強くお勧めします。

于 2012-05-06T18:56:26.447 に答える
3

これをステートメントとして書くだけなら:

preProcess ( new cPreFilterProcess(pars) );

は既に構築されているため、有効ではありませんpreProcess。そのため、構文は関数のように「呼び出し」を試みます。

これも有効ではありません:

preProcess = new cPreFilterProcess(pars);

を に代入できないcPreFilterProcess*ためshared_ptr<cPreFilterProcess>

多分あなたは意味します:

preProcess.reset( new cPreFilterProcess(pars) );

また

preProcess = boost::shared_ptr<cPreFilterProcess>( new cPreFilterProcess(pars) );
于 2012-05-06T18:46:48.503 に答える