0

使用boost::scoped_ptr或者boost::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);

因为您不能将 a 分配cPreFilterProcess*给 ashared_ptr<cPreFilterProcess>

也许你的意思是:

preProcess.reset( new cPreFilterProcess(pars) );

或者

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