【问题标题】:c++ getline() error, no instance of overload function "getline" matches the argument listc++ getline() 错误,没有重载函数“getline”的实例与参数列表匹配
【发布时间】:2023-03-10 18:50:01
【问题描述】:

使用 getline() 函数时出现以下错误:

没有重载函数“getline”的实例与参数列表匹配

在一个名为“时间”的类中,我在读取以下输入时使用它:

istream & operator >> (istream & input, Time & C) /// An input stream for the hour     minutes and seconds
{
char ch;
input >> C.hour >> ch >> C.minute >> ch >> C.second;
getline(input,C.ampm,',');

return input;   /// Returning the input value
}

这很好用,但我也想将它用于另一个名为“Shares”的类:

istream & operator >> (istream & input, Shares & C) /// An input stream for the day, month and year
{
char ch;
input >> C.price >> ch >> C.volume >> ch >> C.value >> ch;
getline(input,C.value,',');

return input;   /// Returning the input value
}

但是,“shares”类中的 getline 函数给了我错误。 两个类都在使用库:

#include <iostream>
#include <string>

我该如何克服这个问题? 谢谢

【问题讨论】:

  • C.apmp 和 C.value 有哪些类型?
  • ampm 是字符串,值是双精度
  • 我认为这可能是问题所在。该 getline 期待 instream,string
  • 我不太明白你想做什么。 getline 上面的那行不是已经在解析你的值了吗?

标签: c++ getline overloading


【解决方案1】:

getline(input,C.value,',');

根据 cmets,您写道 C.value 是双倍的。这不会飞,因为正如其他人指出的那样,预期的参数是string type

您需要读入一个临时字符串,然后将其转换为您的双精度。后一步很简单,但使用 C++11 的std::stod 更简单。

因此,你会这样写:

std::string valueString;
getline(input, valueString, ',');
C.value = std::stod(valueString);

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多