Ошибка компиляции во время урока boost.python (ошибка: неправильное количество аргументов шаблона (1, должно быть 4) claPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка компиляции во время урока boost.python (ошибка: неправильное количество аргументов шаблона (1, должно быть 4) cla

Сообщение Anonymous »

Я следил за https://www.boost.org/doc/libs/1_74_0/l ... xpose.html. Но в руководстве по повышению не говорится, как его построить. Рекомендуется использовать b2, поэтому я последовал инструкциям на предыдущей странице по ссылке выше. (Я добавил b2 в $PATH и создал символическую ссылку для libboost_python.so в /usr/local/lib). Однажды я скомпилировал и запустил этот пример world.cpp (см. представление класса C++ в Python (можно загрузить только ET_DYN и ET_EXEC)) но на этот раз он почему-то не работает, и теперь я пытаюсь сделать это с помощью b2.

Вот файл world.cpp.

Код: Выделить всё

#include 
using namespace boost::python;

struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};

BOOST_PYTHON_MODULE(world_ext)
{
using namespace boost::python;
class_("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
а вот Jamfile.

Код: Выделить всё

# Copyright Stefan Seefeld 2016.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

import python ;

project tutorial
: requirements
.
;
# ------ for hello
#python-extension hello_ext : hello.cpp ;
#
#run-test hello : hello_ext hello.py ;
#
#alias test : hello ;
#explicit test ;

# ------ for world
python-extension world_ext : world.cpp ;

run-test world : world_ext world.py ;

alias test : world ;
explicit test ;
когда я запускаю b2, появляется сообщение об ошибке ниже. (РЕДАКТИРОВАТЬ Я исправил world_ext в строке BOOST_PYTHON_MODULE() и добавил, используя пространство имен boost::python; в приведенном выше коде.)

Код: Выделить всё

...found 11 targets...
...updating 4 targets...
gcc.compile.c++ world.o
world.cpp: In function 'void init_module_world_ext()':
world.cpp:20:17: error: wrong number of template arguments (1, should be 4)
class_("World")
^
In file included from /usr/local/include/boost/python/object_core.hpp:20:0,
from /usr/local/include/boost/python/args.hpp:22,
from /usr/local/include/boost/python/make_function.hpp:11,
from /usr/local/include/boost/python/def.hpp:11,
from world.cpp:8:
/usr/local/include/boost/python/def_visitor.hpp:14:56: note: provided for 'template class boost::python::class_'
template  class class_;
^

"g++"   -fPIC -O0 -fno-inline -Wall -g    -I"/usr/include/python3.5" -c -o "world.o" "world.cpp"

...failed gcc.compile.c++ world.o...
...skipped 
world_ext.so for lack of world.o...
...skipped world for lack of world_ext.so...
...failed updating 1 target...
...skipped 3 targets...
Если я закомментирую часть мира и раскомментирую в Jamfile, b2 работает нормально, и я могу запустить hello.py. Файлы hello.cpp, hello.py, world.cpp, world.py находятся в одном каталоге. (~/BOOST/boost_1_73_0/libs/python/example/tutorial)
Похоже, это касается раскрытия классов. Ему требуется 4 параметра шаблона, но исходный код руководства дает только один. Что я должен делать? (кстати, я надеюсь, что специалисты по поддержке обновят руководства для текущей версии Boost с более любезными объяснениями. Между документами и выпущенным кодом много расхождений.)

Подробнее здесь: https://stackoverflow.com/questions/638 ... plate-argu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»