C++ 尝试重载

C++ 尝试重载,c++,C++,我正试图超载 声明非模板运算符并与之成为朋友 声明并与非模板运算符类示例{不应该是类Mystack吗?当涉及模板时,只需将所有内容都放在头文件中。这不值得头痛。@NeilKirk我收到OP的错误,所有内容都在一个文件类示例中{这不应该是类Mystack吗?当涉及模板时,只需将所有内容都放在头文件中。这不值得头痛。@NeilKirk我得到OP的错误,所有内容都在一个文件中,如果我从函数中删除模板,那么我也会得到错误。@tanz As in,just std::ostream&operator@T.

我正试图超载 声明非模板运算符并与之成为朋友
声明并与非模板运算符类示例{不应该是类Mystack吗?当涉及模板时,只需将所有内容都放在头文件中。这不值得头痛。@NeilKirk我收到OP的错误,所有内容都在一个文件类示例中{这不应该是类Mystack吗?当涉及模板时,只需将所有内容都放在头文件中。这不值得头痛。@NeilKirk我得到OP的错误,所有内容都在一个文件中,如果我从函数中删除模板,那么我也会得到错误。@tanz As in,just std::ostream&operator@T.C.你能详细说明哪条路最好吗怎么办?我的意思是,在这种情况下,什么是最佳做法,例如,为类模板创建一个运算符重载…我们应该在类定义中使用,还是您提到的第一种方法第二种方法显然是危险的。如果我从函数中删除模板,那么我也会得到错误。@tanz如中所示,只是std::ost令,operator@T.C.你能详细说明哪种方法是最好的方法吗?我的意思是,对于这种情况,什么是最好的做法,例如,为类模板提供一个操作符重载…我们应该在类定义中使用,还是你提到的第一种方法第二种方法显然是危险的。
template <class T>
class Mystack{
    friend std::ostream& operator<<(std::ostream& s, Mystack<T> const& d)
    {
        d.print(s);
        return s;
    } 
};
template <class T>
class Mystack{
    friend std::ostream& operator<<(std::ostream& s, Mystack<T> const& d); 
};
template <class T>
std::ostream& operator<<(std::ostream& s, Mystack<T> const& d)
{
    d.print(s);
    return s;
}
Mystack<int> intstack;
std::cout << intstack;
friend std::ostream& operator<<(std::ostream& s, Mystack<T> const& d);
template<class T>
std::ostream& operator<<(std::ostream& s, Mystack<T> const& d)
{
    d.print(s);
    return s;
}
// forward declarations
template <class T>
class Mystack;
template <class T>
std::ostream& operator<<(std::ostream& s, Mystack<T> const& d);

template <class T>
class Mystack
{
    friend std::ostream& operator<< <T>(std::ostream& s, Mystack<T> const& d); 
//                                  ^^^
};
template <class T>
class Mystack
{
public:
    template <class U>
    friend std::ostream& operator<<(std::ostream& s, Mystack<U> const& d);
};