朱倩倩zqq 2021-05-11 23:36 采纳率: 75%
浏览 27
已采纳

关于重载输入输出在类模板中的应用(求大佬指点)

#include<iostream>
#include<cstdlib>
using namespace std;
template<class T>
class data1
{
private:
    T* date;
    int size;
public:
    data1(int n=0);
    ~data1();
    data1(const data1<T>& cp);
    data1<T>& operator=(const data1<T>& cp);
    T get(int _size);
    friend istream& operator>>(istream& in, data1<T>& cp);
    friend ostream& operator<<(ostream& out, data1<T>& cp);
};
template<class T>
data1<T>::data1(int n):size(n)
{
    date = new T[size];
    for (int i = 0; i < size; i++)
    {
        date[i] = rand() % 100;
    }
}
template<class T>
data1<T>::~data1()
{
    if (date != 0)
        delete[]date;
}
template<class T>
data1<T>::data1(const data1<T>& cp)
{
    size = cp.size;
    date = new T[size];
    for (int i = 0; i < size; i++)
    {
        date[i] = cp.date[i];
    }

}
template<class T>
data1<T>& data1<T>::operator=(const data1<T>& cp)
{
       if (date != 0)
        delete[]date;
       size = cp.size;
       date = new T[size];
       for (int i = 0; i < size; i++)
       {
           date[i] = cp.date[i];
       }
}
template<class T>
T data1<T>::get(int _size)
{
    return date[_size];
}
template<class T>
istream& operator>>(istream& in, const data1<T>& cp)
{
    in >> cp.size;
    for (int i = 0; i <cp.size; i++)
    {
        in >> cp.date[i];
    }
    return in;
 }
template<class T>
ostream& operator<<(ostream& out,const data1<T>& cp)

    out << "输出元素个数为:" << cp.size << endl;
    for (int i = 0; i < cp.size; i++)
    {
        out >> cp.date[i]<<" ";
    }
    return out;
}
int main()
{
    data1<int> bu9(5);
    cin >> bu9//调用重载输入模板,出现无法解析外部符号,这是为什么呢?
    cout << bu9;
    return 0;

}

  • 写回答

4条回答 默认 最新

  • p15965349202 2021-05-12 01:14
    关注

    将友元函数在模板类内部实现就好了,再Effective C++条款45中,有详细解释

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)