我正在尝试编写一个打开文件的程序,并计算该文件中以空格分隔的单词。
#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:\mingw\lib\gcc\mingw32\5.3.0\include\c++\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:\mingw\lib\gcc\mingw32\5.3.0\include\c++\fstream:495:7: note: no known conversion for argument 1 from 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'const char*'
c:\mingw\lib\gcc\mingw32\5.3.0\include\c++\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:\mingw\lib\gcc\mingw32\5.3.0\include\c++\fstream:481:7: note: candidate expects 0 arguments, 1 provided
c:\mingw\lib\gcc\mingw32\5.3.0\include\c++\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:\mingw\lib\gcc\mingw32\5.3.0\include\c++\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>&'
答案 0 :(得分:1)
g++ -std=c++11 Assignment1.cpp
应该有效。问题是多年来C ++有不同的标准。标准变得混杂。你在编译时看到的90%与ios有关的错误,根据我的经验,要么用gcc编译,要么标准错误。对不起,我无法确定;我没有使用Windows。
答案 1 :(得分:0)
filename.append(".txt");
file.open(filename.c_str());
适用于我的情况