2013-06-11 4 views
3

У меня есть следующий код:подталкивание питон опциональный вызывает ошибку

//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 &>>()) 

это не вызывает каких-либо ошибок.

+0

Я думаю, вы должны держать кипящий сломанный код до тех пор, пока у вас не будет всего несколько строк. Это поможет прояснить проблему. –

ответ

1

Вы забыли указать значение по умолчанию FileSize. Для этого объявления для работы: init<const string&, optional<int, const string&>> вам нужен конструктор, который можно вызвать только с параметром const string&. На данный момент у вас их нет, что является точной жалобой компилятора.

+0

К сожалению ... глупо меня. – elyashiv

Смежные вопросы