我無法使用Comeau和G ++編譯器在C++中編譯小代碼。我認爲我的代碼存在問題。那就是:G ++:從模板調用函數:undefined symbol
template < typename T > void f(T t) { g(t); }
void g(int){}
int main() {
int a = 0;
f(a);
return 0;
}
功能g()
這裏不是由編譯器發現。 但是,如果使用一個用戶定義類型(不int
),它被編譯OK:
template < typename T > void f(T t) { g(t); }
struct A {};
void g(A a) {}
int main() {
A a;
f(a);
return 0;
}
誰能幫我編譯這段代碼INT(雙,字符等)?
在第一個代碼片段中,您的模板函數「f」預計可以是任何類型的參數。這種類型被標記爲「T」。但是,在該函數內部,您將一個類型爲「T」的值傳遞給僅接受整數的函數。如果'T'不是整數類型?你怎麼可以解釋這一點? 我懷疑第二個代碼片段編譯並運行;但是,這並沒有改變問題的根源。 爲了讓'f'對所有類型都可用,你必須讓'g'適用於所有類型,或者使它獨立於'T'類型。 –