我正在关注指定项目的http://programmingnotes.freeweq.com/?p=3144教程。问题是项目规范要求通过此函数通过main
调用拼写检查器:
void spellCh(istream& inf, istream& wordlistfile, ostream& outf)
而教程使用iftream
和ofstream
。所以当我尝试这个时
void spellCh(istream& inf, ostream& outf)
{
ifstream& inf1 = inf;
ofstream outf1= outf;
}
它在两行上都给出了一个错误:非常量左值引用类型' ifstream' (又名' basic_ifstream')无法绑定到不相关类型的值#istream' (又名' basic_istream')
请帮忙,因为我花了一天时间试图解决这个问题。什么样的代码可以实现它?
答案 0 :(得分:1)
std::istream
和std::ostream
分别是std::ifstream
和std::ofstream
的直接基类。由于称为polymorphism的东西,派生类也被认为是它的基类,并且可以隐含地覆盖指针或对其的引用(向上转换)。因此,可以简单地将这些实例传递给函数的参数,并且编译器将成功地将它们转换为它们的基类'类型。
对类型
'ifstream'
的非常量左值引用无法绑定到不相关类型的值'istream'
对于从基础到派生的转换(向下转换),没有隐式转换。您必须使用static_cast
投射,目标类型为std::ifstream&
。