A!ive 2020-04-01 22:48 采纳率: 50%
浏览 147

请问为什么类模板里友元模板函数这样写会报错。

template
class Pair{
private:
T1 key;
T2 value;
public:
template
friend ostream & operator << ( ostream & os, const Pair &r );

};
这个友元函数定义写在外面就完全没有问题,如果定义写在里面的话,如果在main函数里定义 Pair< string,int >没问题,再写Pair< double,int >就会报错,似乎是redefinition等等,请问这是什么原因呢

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-02 00:44
    关注
    #include <iostream>
    using namespace std;
    template<class T1, class T2>
    class Pair{
    private:
        T1 key;
        T2 value;
    public:
        Pair(T1 k, T2 v) { key = k; value = v; }
        template<class T1, class T2>
        friend ostream& operator<<(ostream& out,const Pair<T1,T2>& p);
    };
    
    template<class T1, class T2>
    ostream& operator<<(ostream& out,const Pair<T1,T2>& p)
    {
        out<<p.key<<","<<p.value<<endl;
        return out;
    }
    
    int main(int argc, _TCHAR* argv[])
    {
        Pair<int,int> p(12,345);
        cout << p;
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法