2015-04-12 3 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

_' # включить '_ Вы пытаетесь это с Turbo C++? –

+0

c бесплатно .... я работаю с ..... это было значение = v; но он теперь решен. – neha

ответ

0

Объявить функцию друга, как

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

Кроме того, в "новой" заголовка C++ iostream должен быть определен как

#include <iostream> 

и вы должны использовать директиву

using namespace std; 

если вы не хотите менять другой код в программе.

+0

эй спасибо ... это тоже сработало ..... но этот компилятор работает со старым синтаксисом файла заголовка ..... так что второе предложение не работает с ним – neha

+0

@neha Кажется, ваш старый компилятор не поддерживает имена пространства имен. :) –

0

Вы пропустили указать шаблон в friend декларации:

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

Смотреть полностью рабочий sample здесь, пожалуйста.

+0

спасибо, дорогая ... теперь это сработало. – neha

+0

, но почему это необходимо, чтобы указать другой аргумент шаблона U, когда мы использовали T в форвардной декларации .... когда мы используем T, он показывает ошибку ... почему так? – neha

+0

@neha _ ", когда мы используем T, он показывает ошибку ... почему так?" _ Поскольку 'T' уже используется классом закрывающего шаблона. –

Смежные вопросы