C++: cin.getline - 没有重载函数的实例
C++: cin.getline - no instance of overload function
我正在尝试将一行文本写入 .txt 文件,但是 visual studio 2015 给我以下错误。
Severity Code Description Project File Line Suppression State
Error (active) no instance of overloaded function "std::basic_istream<_Elem, _Traits>::getline [with _Elem=char, _Traits=std::char_traits]" matches the argument list Studying c:\Users\Klaas\Documents\Visual Studio 2015\Projects\Studying\Studying\Studying.cpp 16
和
Severity Code Description Project File Line Suppression State
Error C2664 'std::basic_istream> &std::basic_istream>::getline(_Elem *,std::streamsize,_Elem)': cannot convert argument 1 from 'std::string' to 'char *' Studying1 c:\users\klaas\documents\visual studio 2015\projects\studying1\studying1\studying1.cpp 16
我的源代码:
#include <iostream>
#include "stdafx.h"
#include <fstream>
#include <string>
using namespace std;
int main()
{
ofstream myFile;
string myText;
myFile.open("sometext.txt");
cout << "Write text to save to file: ";
cin.ignore();
cin.getline(myText, sizeof(myText));
myFile << myText;
myFile.close();
return 0;
}
我进行了多次搜索并找到了答案,例如
cin.ignore();
高于
cin.getline
,但我就是无法让它工作,而且我并不真正理解该错误的含义,而且我不明白为什么它认为我正在尝试将字符串转换为字符。
非常欢迎任何提示:)
您没有使用正确的功能。而不是 cin.getline()
你应该使用
std::getline(cin, myText)
cin.getline()
需要预分配 char*
,而您的 myText
不是。也很难以某种方式设法为 std::basic_istream::getline()
预分配足够长的缓冲区,因此此功能几乎从来没有用过。
使用 getline(cin,myText)
老实说,我不知道为什么会存在这个问题,或者它是否真的是一个问题,但我知道这是可行的。
参见:http://www.cplusplus.com/reference/istream/istream/getline/
参见:http://en.cppreference.com/w/cpp/io/basic_istream/getline
函数getline的第一个参数必须是char *,不能是字符串。
char myText[1024];
cin.getline( myText, sizeof(myText) );
如其他地方所述,最好使用 std::getline
函数:
http://en.cppreference.com/w/cpp/string/basic_string/getline
我正在尝试将一行文本写入 .txt 文件,但是 visual studio 2015 给我以下错误。
Severity Code Description Project File Line Suppression State Error (active) no instance of overloaded function "std::basic_istream<_Elem, _Traits>::getline [with _Elem=char, _Traits=std::char_traits]" matches the argument list Studying c:\Users\Klaas\Documents\Visual Studio 2015\Projects\Studying\Studying\Studying.cpp 16
和
Severity Code Description Project File Line Suppression State Error C2664 'std::basic_istream> &std::basic_istream>::getline(_Elem *,std::streamsize,_Elem)': cannot convert argument 1 from 'std::string' to 'char *' Studying1 c:\users\klaas\documents\visual studio 2015\projects\studying1\studying1\studying1.cpp 16
我的源代码:
#include <iostream>
#include "stdafx.h"
#include <fstream>
#include <string>
using namespace std;
int main()
{
ofstream myFile;
string myText;
myFile.open("sometext.txt");
cout << "Write text to save to file: ";
cin.ignore();
cin.getline(myText, sizeof(myText));
myFile << myText;
myFile.close();
return 0;
}
我进行了多次搜索并找到了答案,例如
cin.ignore();
高于
cin.getline
,但我就是无法让它工作,而且我并不真正理解该错误的含义,而且我不明白为什么它认为我正在尝试将字符串转换为字符。
非常欢迎任何提示:)
您没有使用正确的功能。而不是 cin.getline()
你应该使用
std::getline(cin, myText)
cin.getline()
需要预分配 char*
,而您的 myText
不是。也很难以某种方式设法为 std::basic_istream::getline()
预分配足够长的缓冲区,因此此功能几乎从来没有用过。
使用 getline(cin,myText)
老实说,我不知道为什么会存在这个问题,或者它是否真的是一个问题,但我知道这是可行的。
参见:http://www.cplusplus.com/reference/istream/istream/getline/
参见:http://en.cppreference.com/w/cpp/io/basic_istream/getline
函数getline的第一个参数必须是char *,不能是字符串。
char myText[1024];
cin.getline( myText, sizeof(myText) );
如其他地方所述,最好使用 std::getline
函数:
http://en.cppreference.com/w/cpp/string/basic_string/getline