我正在尝试让它工作,但它出现错误消息
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 }
现场演示