C++ 如何在普通类的friend函数中发送模板类参数

C++ 如何在普通类的friend函数中发送模板类参数,c++,templates,C++,Templates,我的代码写在下面 template<class t> class stack{ private: t val; stack *next; public: stack(t); //void push(stack &st); //void traverse(); }; class pstack{ public: static

我的代码写在下面

template<class t>
class stack{
        private: t val;
                 stack *next;
        public:  stack(t);
                 //void push(stack &st);
                 //void traverse();
};
class pstack{
  public:
        static pstack *top;
        friend void push(stack &,pstack *);  //This line is not working
};
模板
类堆栈{
私人:t val;
堆栈*下一步;
公众:stack(t);;
//空推(堆栈和st);
//无效遍历();
};
类pstack{
公众:
静态pstack*顶部;
friend void push(stack&,pstack*);//此行不起作用
};
“stack”是模板类,“pstack”是非模板类。在“pstack”类中,“push”是一个将参数作为模板类“stack”对象的友元函数


请帮助我更正此推送功能。

您还必须将
推送功能设置为模板:

class pstack{
  public:
        static pstack *top;

        template<typename T>
        friend void push(stack<T> &,pstack *);
};
class pstack{
  public:
        static pstack *top;
        template <class T> friend void push(stack<T> &,pstack *); 
};
class-pstack{
公众:
静态pstack*顶部;
模板
朋友无效推送(堆栈和pstack*);
};

也将您的朋友声明为模板:

class pstack{
  public:
        static pstack *top;

        template<typename T>
        friend void push(stack<T> &,pstack *);
};
class pstack{
  public:
        static pstack *top;
        template <class T> friend void push(stack<T> &,pstack *); 
};
class-pstack{
公众:
静态pstack*顶部;
模板推送(堆栈和pstack*);
};

类模板在使用前需要实例化。因此,在函数声明中,需要将模板类型参数添加到
stack

friend void push(堆栈和pstack*)