我正在尝试将一行文本写入.txt文件,但Visual Studio 2015给出了以下错误。
严重级代码描述项目文件行抑制状态 错误(活动)没有重载函数的实例" std :: basic_istream< _Elem,_Traits> :: getline [with _Elem = char,_Traits = std :: char_traits]"匹配参数列表学习c:\ Users \ Klaas \ Documents \ Visual Studio 2015 \ Projects \ Studying \ Studying \ Studying.cpp 16
和
严重级代码描述项目文件行抑制状态 错误C2664' std :: basic_istream> & std :: basic_istream> :: getline(_Elem *,std :: streamsize,_Elem)':无法从' std :: string'转换参数1到#char;'学习1 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
,但我无法让它发挥作用而且我不能真正理解错误的含义,而且我也不明白为什么它认为我试图转换一个错误字符串到char。
非常欢迎任何提示:)
答案 0 :(得分:2)
您没有使用正确的功能。而不是cin.getline()
你应该使用
std::getline(cin, myText)
cin.getline()
预计会预先分配char*
,而myText
不会。以某种方式设置为std::basic_istream::getline()
预分配一个足够长的缓冲区也很困难,所以这个函数几乎从来没用过。
答案 1 :(得分:0)
使用getline(cin,myText)
老实说,我不知道为什么会出现这个问题,或者它是否存在问题,但我知道这是有效的。
答案 2 :(得分:0)
请参阅: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