C ++:cin.getline - 没有重载函数的实例

时间:2016-04-06 18:19:37

标签: c++ visual-studio getline

我正在尝试将一行文本写入.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。

非常欢迎任何提示:)

3 个答案:

答案 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