У меня есть следующий код:подталкивание питон опциональный вызывает ошибку
//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) ошибка исчезает, но я не» t получить необязательные параметры.
Я компилирую с использованием VS2010, python27 и C++ boost libs.
Может кто-нибудь объяснить, почему я получаю эту ошибку и как ее решить?
EDIT
Я попытался обнажая третий конструктор вместо этого используя следующую строку:
.def(init<const string&, const string &, optional<const string &>>())
это не вызывает каких-либо ошибок.
Я думаю, вы должны держать кипящий сломанный код до тех пор, пока у вас не будет всего несколько строк. Это поможет прояснить проблему. –