我有以下代码:
//test.cpp
#include <Physical_file.h>
#include <boost\python.hpp>
using namespace boost::python;
using namespace FMS_Physical;
BOOST_PYTHON_MODULE(python_bridge)
{
class_<Physical_file, boost::noncopyable>("pf")
.def(init<const string&, optional<int, const string&>>())
;
}
//Physical_file.h
#include <fstream>
#include "tools.h"
using namespace std;
namespace FMS_Physical
{
class Physical_file
{
public:
fstream filefl;
string workingDir;
string fileName;
int fileSize;
block currBlock;
block FHBuffer;
bool opened;
string openMode;
/************
functions
************/
Physical_file(void);
Physical_file(const string &FileName, int FileSize,const string &Dir = getCurrentPath());
Physical_file(const string &FileName, const string &Type, const string &Dir = getCurrentPath());
~Physical_file(void);
};
}
还有一些代码,我认为这与问题无关。
当我尝试编译代码时,出现以下错误:
Error 5 error C2664: 'FMS_Physical::Physical_file::Physical_file(const FMS_Physical::Physical_file &)' : cannot convert parameter 1 from 'const std::string' to 'const FMS_Physical::Physical_file &'
当我从构造函数的定义中删除optional
时(在test.cpp中),错误消失了,但我没有得到可选参数。
我正在使用VS2010,python27和c ++ boost libs进行编译。
任何人都可以解释为什么我会收到此错误,我该如何解决?
编辑
我尝试使用以下行来暴露第三个构造函数:
.def(init<const string&, const string &, optional<const string &>>())
这不会导致任何错误。
答案 0 :(得分:1)
您忘记了默认FileSize
。
要使此声明有效:init<const string&, optional<int, const string&>>
你需要一个只能用const string&
参数调用的构造函数。你目前没有这样的,这是编译器的确切抱怨。