请注意以下代码中的错误?

时间:2015-04-12 09:03:31

标签: c++ templates friend

#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;
}

此代码涉及具有朋友功能的模板。运行代码时,我收到以下错误:

  

错误:第22行中对f(myclass&amp;)的未定义引用

好的建议。提前谢谢。

2 个答案:

答案 0 :(得分:0)

声明好友函数,如

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

同样在“new”C ++标题中,iostream应指定为

#include <iostream>

你应该使用指令

using namespace std;

如果您不想更改程序中的其他代码。

答案 1 :(得分:0)

您错过了在friend声明中指定模板:

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

请在此处查看完整正常的sample