编辑:意外复制粘贴的一行两次。
我正在使用增强和普通的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
我想我已经包含了所有的头文件,但是我不知道为什么它说它不在这个范围内声明。任何帮助都将非常感激
比如(几乎?)Boost中的所有内容(不是宏)都在一个名称空间中,在本例中是Boost::python
。要么:
使用命名空间提升::python;
在文件顶部(就在包含之后)。提升::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。 实现了