【问题标题】:C++: cin.getline - no instance of overload functionC++:cin.getline - 没有重载函数的实例
【发布时间】:2016-04-06 18:19:36
【问题描述】:

我正在尝试将一行文本写入 .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)':无法将参数 1 从 'std::string' 转换为 '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

,但我就是无法让它工作,而且我真的不明白错误的含义,而且我不明白为什么它认为我正在尝试将字符串转换为字符。

非常欢迎任何提示:)

【问题讨论】:

  • 它需要 char*,而不是字符串
  • sizeof(myText) 不会像您认为的那样做。而是使用myText.size()
  • 我看到了,但我不确定如何让它期望一个字符串,我也不确定它首先是如何期望一个 char* :(
  • std::getline() 需要字符串,而不是 std::istream::getline()
  • @πάνταῥεῖ,不适用于 OP :)

标签: c++ visual-studio getline


【解决方案1】:

您没有使用正确的功能。而不是 cin.getline() 你应该使用

std::getline(cin, myText)

cin.getline() 需要预先分配的 char*,而您的 myText 不是。也很难以某种方式设法为std::basic_istream::getline() 预分配足够长的缓冲区,所以这个函数几乎从来没有用过。

【讨论】:

  • 啊,明白了,非常感谢您的帮助,现在可以使用了 :)
  • 我认为他也可以预先分配字符向量并将迭代器连同向量的大小一起传递到开头以避免溢出,但我认为解决方案是针对极端情况
【解决方案2】:

使用getline(cin,myText) 老实说,我不知道为什么会出现这个问题,或者它是否是个问题,但我知道这是可行的。

【讨论】:

  • 我真的不知道为什么会出现这个问题不回答,比。
  • 非常感谢 :) 现在可以使用了。这是 Visual Studio 特有的,还是我只是理解使用 cin.getline() 的教程错误?
  • 你可能应该忘记那些教程
  • @Lan_Tian 检查std::istream::getline()std::getline()
【解决方案3】:

见: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

【讨论】:

  • 请不要推荐那种错误和模棱两可的参考。 en.cppreference.com 做得更好。
  • @πάντα ῥεῖ 我不知道 cplusplus 网站有问题。那我就试试 cppreference 一个。谢谢!
  • @user4581301 :是的,这是一个比std::getline 更糟糕的解决方案,但我只是想告知 OP 代码中的错误是什么。我将编辑我的答案以阻止我坠入地狱,然后......
  • 那可不是下地狱。坠入地狱始于#include &lt;bits/stdc++.h&gt; using namespace std;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2021-10-13
相关资源
最近更新 更多