2015-04-12 33 views
-1
#include<iostream.h> 
template<class T> 
class myclass; 

template<class T> 
void f(myclass<T> &c); 

template<class T> 
class myclass 
{ 
    private: 
     T value; 
    public: 
     friend void f(myclass<T> &c); 

    T getvalue() 
    { 
     return value; 
    } 
    void setvalue(T v) 
    { 
     value=v; 
    } 
}; 

template<class T> 
void f(myclass<T> &c) 
{ 
    cout<<endl<<"function called:\n"; 
    cout<<c.getvalue()<<endl; 
} 
int main() 
{ 
    myclass<int> object; 
    object.setvalue(6); 
    f(object); 
    return 0; 
} 

此代碼是關於具有朋友功能的模板。在運行代碼時,出現以下錯誤:請在下面的代碼中提示錯誤?

error:undefined reference to f(myclass &) in line 22

請注意。提前致謝。

+0

你能在第22行添加註釋嗎? – wimh

+0

_'#include '_你用Turbo C++來試試這個嗎? –

+0

c免費....我正在.....它是值= v;但現在解決..謝謝! – neha

回答

0

聲明友元函數一樣

friend void f<>(myclass<T> &c); 

此外,在 「新」 C++頭的iostream應像

#include <iostream> 

指定,並且你應該使用指令

using namespace std; 

如果你這樣做不想更改程序中的其他代碼。

+0

嘿謝謝... dis太過分了......但是這個編譯器和頭文件的舊語法一起工作.....所以第二個建議不會適用於它 – neha

+0

@neha看起來你的舊編譯器不支持命名空間名稱。 :) –

0

你錯過了指定在friend聲明模板:

template<typename U> 
friend void f(myclass<U> &c); 

看到一個完全在這裏工作sample請。

+0

thanx親愛的...它現在工作。 – neha

+0

但爲什麼當我們在向前聲明中使用T時,需要指定不同的模板參數U.當我們使用T時,它顯示錯誤...爲什麼這麼說? – neha

+0

@neha _「當我們使用T時,它顯示錯誤...爲什麼這樣?」_因爲'T'已經被封閉的模板類使用。 –

相關問題