我有一個(gè)名為的模板類,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; } } };}我正在嘗試使用以下代碼將此類導(dǎo)入 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()這就是當(dāng)我嘗試運(yùn)行此代碼時(shí)發(fā)生的情況:>>> 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為什么我會(huì)收到此錯(cuò)誤以及如何修復(fù)它?
1 回答

月關(guān)寶盒
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
這只是編譯時(shí)的一個(gè)愚蠢錯(cuò)誤:在setup.py
我傳遞"main.cpp"
給cythonize
函數(shù)而不是"main.pyx"
,并且在編譯時(shí)并沒(méi)有導(dǎo)致錯(cuò)誤,因?yàn)槲矣辛硪粋€(gè)名為main.cpp
.
添加回答
舉報(bào)
0/150
提交
取消