将istream转换为ifstream?

时间:2014-08-12 22:00:06

标签: c++

我正在关注指定项目的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;        
}

它在两行上都给出了一个错误:非常量左值引用类型' ifstream' (又名' basic_ifstream')无法绑定到不相关类型的值#istream' (又名' basic_istream')

请帮忙,因为我花了一天时间试图解决这个问题。什么样的代码可以实现它?

1 个答案:

答案 0 :(得分:1)

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

  

对类型'ifstream'的非常量左值引用无法绑定到不相关类型的值'istream'

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

相关问题