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