【问题标题】:kindly suggest the mistake in following code?请提出以下代码中的错误?
【发布时间】:2015-04-12 09:03:30
【问题描述】:
#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 &) 的未定义引用

请建议。提前致谢。

【问题讨论】:

  • 你能在第 22 行的位置添加注释吗?
  • #include&lt;iostream.h&gt; 你在用 Turbo C++ 试试这个吗?
  • c free....我正在使用.....它是 value=v;但现在解决了..谢谢!!

标签: c++ templates friend


【解决方案1】:

像这样声明朋友函数

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

同样在“新”C++ 标头中,iostream 应指定为

#include <iostream>

你应该使用指令

using namespace std;

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

【讨论】:

  • 嘿,谢谢...dis也工作了.....但是这个编译器使用头文件的旧语法.....所以第二个建议不会用它
  • @neha 看来您的旧编译器不支持命名空间名称。:)
【解决方案2】:

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

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

请在此处查看完整工作的sample

【讨论】:

  • 但是当我们在前向声明中使用 T 时为什么需要指定不同的模板参数 U....当我们使用 T 时它显示错误...为什么会这样?
  • @neha "当我们使用 T 时它显示错误...为什么会这样?" 因为 T 已经被封闭的模板类使用了。
猜你喜欢
  • 2017-02-16
  • 2021-04-05
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
相关资源
最近更新 更多