0
나는 생성자에서 사용자 입력을 받아서 그 파일 (그리고 다른 것들)을 파일에 쓴다. C++ (MSVC와 GCC 모두)에서 완벽하게 작동하며 이제는이 클래스를 Python 프로젝트에 사용하고 싶습니다. 내 파일은 다음과 같습니다사용자 입력을 받아들이는 C++ 클래스 용 Boost Python 사용하기
foo.h
#include <iostream>
#include <fstream>
#include <stdio.h>
class Foo
{
public:
explicit Foo(const std::string file_name, const std::string other_input);
virtual ~Foo();
void Write(const std::string random_text);
private:
std::ofstream output_file;
char buffer[200];
std::string random_string;
};
foo.cpp에
#include <Python.h>
#include <boost/python.hpp>
#include <boost/shared_ptr.hpp>
// Constructor
Foo::Foo(const std::string file_name, const std::string other_input)
{
std::ifstream file_exists(file_name)
if(file_exists.good())
output_file.open(file_name, std::ios_base::app);
else
output_file.open(file_name);
random_string = other_input;
}
// Destructor
Foo::~Foo()
{
output_file.close();
}
// Write to a file
void Foo::Write(const std::string random_text)
{
sprintf(buffer, "%s", random_string);
output_file << buffer << ";\n";
}
// Boost.Python wrapper
BOOST_PYTHON_MODULE(foo)
{
boost::python::class_<Foo>("Foo", boost::python::init<>())
.def("Write", &Foo::Write)
;
}
내가 비주얼 스튜디오 나 GCC에이를 컴파일 할 때, 나는 다음과 같은 오류를 얻고있다 :
'std::basic_ofstream<_Elem,_Traits>::basic_ofstream' : cannot access private member declared in class 'std::basic_ofstream<_Elem,_Traits>'
이것이 왜 그런지에 대해 완전히 혼란 스럽습니다. 발 뒤꿈치에이 높게 평가 될 것이다 얻을
'Foo' : no appropriate default constructor available
모든 아이디어 : 나는 오류가 여기
// Boost.Python wrapper
BOOST_PYTHON_MODULE(foo)
{
boost::python::class_<Foo, boost::noncopyable>("Foo", boost::python::init<>())
.def("Write", &Foo::Write)
;
}
을 그리고 : 나는 즉, 래퍼의 또 다른 변형을 시도했다! 사전에
감사합니다 ..
이것은 완벽하게 작동했습니다! 그러나 파이썬 래핑 라이브러리를 빌드하는 동안 이상한 오류가 발생합니다. 나는 다른 질문을하지만 여기에 관련 질문 (https://stackoverflow.com/questions/28152546/linkage-errors-while-building-wrapping-class-using-boost-python). 당신이 볼 수 있다면 그것은 최고 일 것입니다. 감사! – scap3y