【发布时间】:2016-01-30 09:32:51
【问题描述】:
我没有从这段代码中得到任何输出,可能是由于无限循环(不过,不要相信我的话)。我非常密切地关注我的书,但无济于事。
我没有收到任何错误,但运行时没有任何反应。
程序需要打开一个文件,逐个字符更改其内容并将它们写入不同的文件(这是一个精简版)。
class FileFilter
{
protected:
ofstream newFile;
ifstream myFile;
char ch;
public:
void doFilter(ifstream &myFile, ostream &newFile)
{
while (ch!= EOF)
{
myFile.get(ch);
this->transform(ch);
newFile.put(ch);
virtual char transform (char)
{
return 'x';
}
};
class Upper : public FileFilter
{
public:
char transform(char ch)
{
ch = toupper(ch);
return ch;
}
};
int main()
{
ifstream myFile;
ofstream newFile;
myFile.open("test.txt");
newFile.open("new.txt");
Upper u;
FileFilter *f1 = &u;
if (myFile.is_open())
{
while (!nyFile.eof())
{
f1->doFilter(myFile, newFile);
}
}
else
{
cout << "warning";
}
myFile.close();
return 0;
}
【问题讨论】:
-
看起来您在 FileFilter 类中还缺少几个大括号。
-
我想知道为什么您需要在过滤器函数之外使用 while 循环,因为您在过滤器函数中有 while 循环,反之亦然。
-
应该也关闭新文件,不需要使用this->调用transform。但这一切都是偶然的。我看不出有什么是错的。
-
你上面提到的额外循环是我唯一能想到的。是的,这些都是错别字。真的没有其他问题了吗?考虑到它不能正常工作,这太奇怪了。 @DominicMcDonnell
-
关闭或不关闭文件有时会产生影响(取决于操作系统),试试 newFile.close();在末尾。也就是说,这极不可能。
标签: c++ io polymorphism fstream