当前位置: 首页 > 知识库问答 >
问题:

我应该包括什么来boost.python延期?

屈升
2023-03-14

编辑:意外复制粘贴的一行两次。

我正在使用增强和普通的C应用编程接口的组合制作一个C Python扩展,但是我不能编译它。我读过以下文档:

boost提供的文档。组织

来自python wiki的文档

C介质的Python绑定

以下是cpp文件中的代码:

#include <boost/python.hpp>
#include <boost/python/make_constructor.hpp>
#include <boost/python/detail/api_placeholder.hpp>

#include <iostream>
#include <string>
using namespace std;
class TestClass{
    TestClass(string msg){
        cout << "Created test class object" << endl;
        cout << msg;
    }
};
BOOST_PYTHON_MODULE(packet)
{
    class_<TestClass>("TestClass", init<std::string>());
}

生成文件:

test: test.cpp
    g++ -Wall -shared -std=c++11 -fPIC -I/usr/include -o test`python3-config --extension-suffix` test.cpp

错误输出:

test.cpp:17:5: error: ‘class_’ was not declared in this scope
     class_<TestClass>("TestClass", init<std::string>());
     ^
test.cpp:17:5: note: suggested alternative:
In file included from /usr/include/boost/python/object_core.hpp:20:0,
                 from /usr/include/boost/python/args.hpp:25,
                 from /usr/include/boost/python.hpp:11,
                 from test.cpp:1:
/usr/include/boost/python/def_visitor.hpp:14:56: note:   ‘boost::python::class_’
 template <class T, class X1, class X2, class X3> class class_;
                                                        ^
test.cpp:17:21: error: expected primary-expression before ‘>’ token
     class_<TestClass>("TestClass", init<std::string>());
                     ^
test.cpp:17:36: error: ‘init’ was not declared in this scope
     class_<TestClass>("TestClass", init<std::string>());
                                    ^
test.cpp:17:36: note: suggested alternative:
In file included from /usr/include/boost/python/class.hpp:20:0,
                 from /usr/include/boost/python.hpp:18,
                 from test.cpp:1:
/usr/include/boost/python/init.hpp:58:7: note:   ‘boost::python::init’
 class init; // forward declaration
       ^
test.cpp:17:52: error: expected primary-expression before ‘>’ token
     class_<TestClass>("TestClass", init<std::string>());
                                                    ^
test.cpp:17:54: error: expected primary-expression before ‘)’ token
     class_<TestClass>("TestClass", init<std::string>());
                                                      ^
make: *** [test] Error 1

我想我已经包含了所有的头文件,但是我不知道为什么它说它不在这个范围内声明。任何帮助都将非常感激

共有1个答案

翁文康
2023-03-14

比如(几乎?)Boost中的所有内容(不是宏)都在一个名称空间中,在本例中是Boost::python。要么:

  1. 添加使用命名空间提升::python;在文件顶部(就在包含之后)。
  2. 请参阅提升::python::class_

这同样适用于其他符号。

文档的快速启动部分显示了这一点。在剩下的大部分时间里,它们只显示简短的代码片段,所以我认为它应该是隐式的。

 类似资料:
  • 问题内容: 我已经编写了一个C ++程序(命令行,可移植代码),并且试图与Windows版本同时发布Linux版本。我写了一个makefile,如下所示: 到目前为止很简单 但据我了解,通常需要执行第二步,即进行安装。因此,当我将install:目标放入makefile中时,应该将哪个命令与之关联?(如果可能的话,我希望它可以在所有Unix系统以及Linux上运行。) 问题答案: 安装 比较简单的

  • 这个方法有什么用? 我可以用另一种方法替换它以获得相同的结果吗?

  • 本文向大家介绍为什么在Bash中应该避免eval,我应该用什么来代替呢?,包括了为什么在Bash中应该避免eval,我应该用什么来代替呢?的使用技巧和注意事项,需要的朋友参考一下 eval是Bash shell的内置命令,它将其参数连接为单个字符串。然后,它将参数与空格连接起来,然后将该字符串作为bash命令执行。以下是其工作方式的示例。 eval示例 在下面的示例中,我们使用一个字符串,该字符串

  • 我有两个文件,第一个是todoHelper。js 它有 导入{addTodo} 但我也看到人们在做默认导出,而不仅仅是导出。有什么区别?

  • 我已经建立了一个Angular 2网络应用程序,它在我的电脑上运行得非常好。但我开始为生产构建,angular cli构建了一个“Hello World”应用程序,而不是使用我的文件来构建我的项目。我正在使用npm开始构建它。现在我有点搞砸了,因为我使用了ng serve,现在它总是使用src文件夹中的文件,而不是我的应用程序文件夹。 无论如何,我的观点是,一旦我解决了这个问题,我想走正确的道路。

  • 我创建了一个类(正如书中所说)来保存从键盘输入的一个人的姓名和姓氏,然后还有另一个类,它将一个人的国家代码、区号和号码封装为字符串 Person将用作Hashmap中的键 Class封装了和。许多对象组成了一个表示电话簿的HashMap。 实现了