我想在C++中創建一個簡單的模板類。我一直在嘗試編譯以下內容,但我只收到編譯錯誤。這是代碼:模板類析構函數
#include <stdlib.h>
#include <stdio.h>
template<int size>
class array {
public:
int len;
int data[size];
array(void) : len(size) {}
virtual ~array(void) {}
};
int main() {
array<3> a;
for (int i=0; i < a.len; ++i) {
a.data[i] = i;
printf("%d\n", a.data[i]);
}
return 0;
}
這是錯誤的g ++ - 4.2.1是給我:
Undefined symbols:
"__Unwind_Resume", referenced from:
_main in ccaYob9x.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
如果我們註釋掉析構函數的線,則代碼編譯,因爲它應該和它給我一個數字0,1,2的列表。
在理解模板基類如何工作之後,我的最終目標是創建專門的模板類。我想創建一個多維數組,但我希望專門針對維數爲1,2和3的情況。我主要希望能夠爲這些情況重載operator()
。在任何情況下,使用這樣的模板類可以省去在維度爲1,2和3時動態分配內存的麻煩。是否有人知道如何更改代碼以動態分配內存?這樣做將需要您定義析構函數,這是我目前面臨的問題。
編輯:
我不熟悉模板專業化。有人知道如何在size = 1,2和3時製作一個專門的模板以獲得數據的靜態內存,並默認具有動態內存?
編輯2:
看來,我有因爲我的G ++編譯器的麻煩。有誰看到任何與此:
g++ -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable- werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple- darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
編輯3:
有一定是有毛病我的g ++版本。我只是用同一臺機器上的g ++ 4.0和macport版本g ++ - mp-4.3來試用它,它工作正常。我想是時候升級到下一個版本了。感謝您的回答和提示。
'func(void)'是一個C語言,在C++中它將是'func()'。 –
在聲明中使用'bar foo(void);'在C++中,正確的方法是'bar foo();'而不是。在C語言中,空括號表示「我不想告訴你參數是什麼」,C++中的含義是「沒有參數」。 – 6502
@ K-ballo,我從構造函數和析構函數中刪除了void,但仍然得到相同的編譯器錯誤。 – jmlopez