错误:调用"std::basic_ifstream<char>::basic_ifstream(std::__cxx11::字符串&)"没有匹配函数

error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::__cxx11::string&)'

本文关键字:basic ifstream std 函数 字符串 lt 调用 错误 char gt cxx11      更新时间:2023-10-16

我正在尝试编写一个程序,该程序打开文件并计数该文件中的空格分隔单词。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
    string filepath;
    cout << "Enter the file path including the file name:" << endl;
    cin >> filepath; 
    ifstream f(filepath);
    int nwords = 0;
    string word;
    while (f >> word)
        ++nwords;
    cout << "Number of words = " << nwords << endl;
}

这是我尝试编译时的错误。

g++ Assignment1.cpp
Assignment1.cpp: In function 'int main()':
Assignment1.cpp:10:21: error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::__cxx11::string&)'
  ifstream f(filepath);
                     ^
In file included from Assignment1.cpp:2:0:
c:mingwlibgccmingw325.3.0includec++fstream:495:7: note: candidate: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
       basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
       ^
c:mingwlibgccmingw325.3.0includec++fstream:495:7: note:   no known conversion for argument 1 from 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'const char*'
c:mingwlibgccmingw325.3.0includec++fstream:481:7: note: candidate: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std::char_traits<char>]
       basic_ifstream() : __istream_type(), _M_filebuf()
       ^
c:mingwlibgccmingw325.3.0includec++fstream:481:7: note:   candidate expects 0 arguments, 1 provided
c:mingwlibgccmingw325.3.0includec++fstream:455:11: note: candidate: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
     class basic_ifstream : public basic_istream<_CharT, _Traits>
           ^
c:mingwlibgccmingw325.3.0includec++fstream:455:11: note:   no known conversion for argument 1 from 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'const std::basic_ifstream<char>&'
g++ -std=c++11 Assignment1.cpp

应该工作。问题是多年来C 的标准不同。标准混合在一起。您在编译时间看到的错误中有90%的错误与iOS有关,根据我的经验,与GCC一起编译了,或者标准是错误的。抱歉,我不能确定;我不使用Windows。

filename.append(".txt");
file.open(filename.c_str());

在我的情况下工作