使用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));
}
};
我错过了什么?感谢。
答案 0 :(得分:6)
我神秘的玻璃魔法调试告诉我你正在做这样的事情:
class X{
boost::shared_ptr<cPreFilterProcess> preProcess;
public:
X(){
preProcess(new cPreFilterProcess(pars));
}
};
您需要使用成员初始值设定项,如:
X() : preProcess(...){}
或者使用.reset
,因为你不能只指定一个像这样的指针:
X() { preProcess.reset(...); }
我强烈推荐第一个选项。
答案 1 :(得分: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) );