我有一个名为的模板类,List在名为的文件中定义containers.h:#include <iostream>#include <vector>namespace containers { template <class T> class List { private: std::vector<T> vector; public: List() {}; ~List() {}; void append(T* item) { vector.push_back(*item); } void print_items() { for ( T item : vector ) { std::cout << item << std::endl; } } };}我正在尝试使用以下代码将此类导入 Cython main.pyx:#!python# cython: language_level = 3# distutils: language = c++cdef extern from "containers.h" namespace "containers": cdef cppclass List[T]: List() except + void append(T *item) void print_items()def test(): cdef List[int] *l = new List[int]() cdef int i for i in range(10): l.append(&i) l.print_items()这就是当我尝试运行此代码时发生的情况:>>> import mainTraceback (most recent call last): File "<stdin>", line 1, in <module>ImportError: /home/arin/Desktop/Misc/test_cpp/main.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN10containers4ListIiEC1Ev为什么我会收到此错误以及如何修复它?
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
这只是编译时的一个愚蠢错误:在setup.py
我传递"main.cpp"
给cythonize
函数而不是"main.pyx"
,并且在编译时并没有导致错误,因为我有另一个名为main.cpp
.
添加回答
举报
0/150
提交
取消