将istream转换为ifstream

Convert istream to ifstream?

本文关键字:ifstream 转换 istream      更新时间:2023-10-16

我正在为分配的项目遵循http://programmingnotes.freeweq.com/?p=3144的教程。问题是,项目规范要求拼写检查器将通过以下函数通过main调用:void spellCh(istream& inf, istream& wordlistfile, ostream& outf)而本教程使用iftreamofstream。所以当我输入

void spellCh(istream& inf, ostream& outf)
{    
    ifstream& inf1 = inf;
    ofstream outf1= outf;        
}

它给了我一个错误在两行:非const左值引用类型'ifstream'(又名'basic_ifstream')不能绑定到不相关类型'istream'(又名'basic_istream')的值

请帮忙,因为我花了一天的时间来弄清楚。什么样的代码可以完成它?

std::istreamstd::ostream分别是std::ifstreamstd::ofstream的直接基类。由于所谓的多态性,派生类也被认为是它的基类,并且可以隐式地覆盖到指针或其引用(向上转换)。因此,可以简单地将这些实例传递给函数的参数,编译器将成功地将其转换为基类的类型。

'ifstream'类型的非const左值引用不能绑定不相关的'istream'类型的值

对于基底到派生的转换(向下转换),没有隐式转换。您必须使用static_cast将目标类型转换为std::ifstream&