代码之家  ›  专栏  ›  技术社区  ›  Prasoon Saurav

友元函数和模板

  •  2
  • Prasoon Saurav  · 技术社区  · 15 年前

    我的问题与 this 问题。

    #include<iostream>
    template< typename T >
    class T1 {
    public:
        T i;
        void display()
        {
           std::cout<<i<<"\n"<<j<<"\n"<<k; 
     }
    protected:
        T j;
    private:
        T k;
        friend void Test( T1 &obj);
    };
    
    template<typename T>
    void Test(T1<T> &obj)
    {
        T a=T();
    
        obj.i=a;
        obj.j=a;
        obj.k=a;
    }
    
    
    int main()
    {
       T1<int>a;
       Test(a);
       a.display();
    }
    

    为什么上面的代码不能编译?

    1 回复  |  直到 15 年前
        1
  •  6
  •   Prasoon Saurav    15 年前

    friend void Test( T1 &obj); 声明一个 non template 功能。

    声明为 template .

    试试这个:

    ....
    private:
    T k;
    template<typename U>
      friend void Test( T1<U> &obj);
    };
    
    推荐文章