【发布时间】:2019-05-21 11:35:30
【问题描述】:
我已经很久没有用 C++ 编写代码了,我正在尝试修复一些旧代码。
我收到了错误:
TOutputFile& TOutputFile::operator<<(TOutputFile&, T)' must have exactly one argument
关于以下代码:
template<class T>
TOutputFile &operator<<(TOutputFile &OutFile, T& a);
class TOutputFile : public Tiofile{
public:
TOutputFile (std::string AFileName);
~TOutputFile (void) {delete FFileID;}
//close file
void close (void) {
if (isopened()) {
FFileID->close();
Tiofile::close();
}
}
//open file
void open (void) {
if (!isopened()) {
FFileID->open(FFileName, std::ios::out);
Tiofile::open();
}
}
template<class T>
TOutputFile &operator<<(TOutputFile &OutFile, const T a){
*OutFile.FFileID<<a;
return OutFile;
}
protected:
void writevalues (Array<TSequence*> &Flds);
private:
std::ofstream * FFileID;
};
那个运算符重载有什么问题?
【问题讨论】:
-
函数原型应该在类声明/定义之后。
-
您对
operator<<()的定义在类内部,这意味着它是成员。因此,除了您指定的参数之外,它还有一个隐含的this参数。将定义移到类之外。 (然后你会看到其他问题,但你还没有问过这些问题)。 -
将其设为友元函数将解决问题,因为届时它将不再是成员函数。