C++创建一个标头,其中包含用于重载 ostream 的模板



我正在尝试让它工作,但它出现错误消息

C2473 " operator << looks like a function definition but there is no parameter list."

基本上,这是一个头文件,我想为一个类声明一个命名空间和一个模板,也覆盖<<运算符。

请帮忙!(我也是堆栈溢出的新手,这是我的第一个问题):)

#ifndef header
#define header
namespace nmsp{
  template <class T> 
  class expt; //forward declaration of class, so friend function can be defined as a template
  template <class T> 
  std::ostream& operator << (std::ostream& os, const expt <T> &input);

template <class T> 
class expt {

    friend std::ostream& operator << (std::ostream& os, const expt <T>& input);
private: 
    T *data;
public: 
    expt() { data = null; }
};
template <class T> 
std::ostream& nmsp:: operator << (std::ostream& os, const expt <class T>& input) {
    //....
}
}
}
#endif

这是您的固定代码(请参阅注释):

namespace nmsp{
  template <class T> 
  class expt; // forward declaration of class, so friend function can be 
              // defined as a template
  template <class T> 
  std::ostream& operator << (std::ostream& os, const expt <T> &input);

template <class T> 
class expt {
    // templated friend declarations don't inherit the outer 
    // class template parameters, you need to make them a template separately
    template <class U>
    friend std::ostream& operator << (std::ostream& os, const expt <U>& input);
private: 
    T *data;
public: 
    expt() { data = nullptr; }
                 // ^^^^^^^ null isn't a thing
};
}
// Move the definition out of the namespace
template <class T> 
std::ostream& nmsp:: operator << (std::ostream& os, const expt <T>& input) {
                                                            // ^^^ drop class
    //....
    return os;
}
// Remove the extra }

现场演示

最新更新