Boost python optional抛出错误

boost python optional raises an error

本文关键字:出错 错误 optional python Boost      更新时间:2023-10-16

我有以下代码:

//test.cpp
#include <Physical_file.h>
#include <boostpython.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库进行编译。

谁能解释一下为什么我得到这个错误,我怎么解决它?

编辑
我试着用下面这行来暴露第三个构造函数:

.def(init<const string&, const string &, optional<const string &>>())

您忘记为FileSize设置默认值了。要使此声明生效:init<const string&, optional<int, const string&>>您需要一个只能用const string&参数调用的构造函数。您目前没有这样的功能,这正是编译器的抱怨。

相关文章: