当前位置:  开发笔记 > 编程语言 > 正文

发现此文件中的错误读取代码(C++)

如何解决《发现此文件中的错误读取代码(C++)》经验,为你挑选了2个好方法。

任何人都可以告诉我为什么这个方法不会编译?

void Statistics::readFromFile(string filename)
{
    string line;
    ifstream myfile (filename);
    if (myfile.is_open())
    {
        while (! myfile.eof() )
        {
            getline (myfile,line);
            cout << line << endl;
        }
        myfile.close();
    }

    else cout << "Unable to open file"; 

}

应该工作吧?但是,我总是收到以下错误消息:

Line Location Statistics.cpp:15: error:
   no matching function for call to
   'std::basic_ifstream >::
      basic_ifstream(std::string*)'

任何帮助将不胜感激.



1> 小智..:
ifstream myfile (filename);

应该:

ifstream myfile (filename.c_str() );

此外,您的读循环逻辑是错误的.它应该是:

while ( getline( myfile,line ) ){
   cout << line << endl;
}

您正在使用的eof()函数仅您尝试读取某些内容后才有意义.

要了解为何会产生影响,请考虑以下简单代码:

int main() {
    string s; 
    while( ! cin.eof() ) {
        getline( cin, s );
        cout << "line is  "<< s << endl;
    }
}

如果你运行它并输入ctrl-Z或ctrl-D来立即指示EOF ,即使没有实际输入任何行(因为EOF),也会执行cout.通常,eof()函数不是很有用,您应该测试getline()或流提取运算符等函数的返回值.



2> jalf..:

阅读编译器错误:

no matching function for call to 'std::basic_ifstream >::basic_ifstream(std::string*)

No matching function for call to: 它无法找到您要调用的功能

std::basic_ifstream >:: - ifstream的成员函数

:basic_ifstream(std::string*) - 以字符串指针作为参数的构造函数

因此,您尝试通过将字符串指针传递给其构造函数来创建ifstream.它找不到接受这种参数的构造函数.

由于您没有在上面传递字符串指针,因此您发布的代码必须与实际代码不同.在询问代码时始终复制/粘贴.错别字使得无法弄清楚问题.无论如何,我记得,构造函数不接受字符串参数,只接受const char*.所以filename.c_str()应该做的伎俩

除此之外,你可以更简单地做到这一点:

ifstream myfile (filename);
    std::copy(std::istream_itrator(myfile),
              std::istream_itrator(),
              std::ostream_iterator(std::cout));
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有