这是我的第一个项目,我不明白我得到的错误
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
int Multiple1 = 0;
int Multiple2 = 0;
cout << "Input your first Multiple: " << endl;
getline(cin, Multiple1);
cout <<"Your First Multiple is: " << Multiple1 << endl;
cout << "Input your second Multiple: " << endl;
getline(cin, Multiple2);
cout << "Your Second Multiple is: " << Multiple2 << endl;
for (int i = 1; i <= 100; i++)
{
if (i % Multiple1 == 0 && i % Multiple2 == 0)
cout << "FizzBuzz" << endl;
else
if (i % Multiple1 == 0)
cout << "Fizz" << endl;
else
if (i % Multiple2 == 0)
cout << "Buzz" << endl;
else cout << i << endl;
}
cin.get();
return 0;
}
以下是错误:
为什么运行代码时 getline(cin, Multiple1);
和 getline(cin, Multiple2);
不起作用?
错误代码
E0304: E0304 no instance of overloaded function "getline" matches the argument list
E0304: no instance of overloaded function "getline" matches the argument list
C2672: 'getline': no matching overloaded function found
C2784:'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)': could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'int'
C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': expects 3 arguments - 2 provided
C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)': could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'int'
C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': expects 3 arguments - 2 provided
C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)': could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'int'
C2780: Severity Code Description Project File Line Suppression State
Error C2780 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &&,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': expects 3 arguments - 2 provided
2 回答
所以在这种情况下,您使用的是
std::getline()
函数 incorrectly .std::getline()
的目的是从标准输入捕获数据,然后将此数据分配给 string type 的变量 .在您的代码中,您正在解析函数的整数或 int type 的
getline()
,并且编译器因此而产生错误 .您可以对代码进行两种修复 . 一种是修复代码的最佳方法,另一种是出于某种原因绝对必须使用
getline()
.为了在不使用
getline()
的情况下修复代码,我建议你直接从标准输入使用>>
运算符到你的变量;或者,如果绝对必须使用
getline()
,则只要字符串需要在数学或整数相关函数中使用,就可以从字符串转换为整数,尽管在这种情况下这是不好的做法 . 注意我已将Multiple1和Multiple2更改为字符串变量,并使用stoi()
函数将字符串更改为整数值,只要字符串用于与整数进行比较 . 此解决方案适用于c 11或更高版本 .希望这一切都能澄清您的问题 . 顺便说一句,使用基于bash的本机编译器(例如g)可以使您的学习体验更容易,因为错误可以更容易理解和谷歌 .
正如评论中已有人指出的那样,
getline
具有可以采取的具体参数 . 第二个参数必须是string
类型,但您尝试传入int
. 这就是您遇到错误的原因,因为编译器期望参数具有特定类型 .根据您的目的,有很多方法可以从用户那里获得输入 . 查看您提供的代码,您似乎只想从用户那里获得
int
. 在这种情况下,getline
似乎不合适,因为它将从输入流中获取字符并将它们放入string
.cin
本身就足够了: