我有一個名為的模板類,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
提交
取消