为什么std :: getline(cin,Number)给出“没有匹配的调用函数”错误?

时间:2012-03-07 08:22:04

标签: c++

我写了一个程序,所以用户输入一个数字,程序输出它的二进制表示。

我收到此错误:

  

没有匹配函数来调用`getline(std :: istream&,unsigned int&)'

我该如何解决这个问题?

此外,它输出:

0
0
0
0

...当它输出正确的输入值时。

#include <iostream>
using namespace std;

int main()
{
    int Number;
    cin >> Number;
    bool Binary[sizeof(int) * CHAR_BIT];
    for (unsigned int i = 0; i < sizeof(int) * CHAR_BIT; i++)
        Binary[(sizeof(int) * CHAR_BIT - 1) - i] = Number & (1 << i);

    for (unsigned int i = 0; i < sizeof(int); i++)
        std::cout << Binary[i] << std::endl;

    system("pause");
    return 0;
}

6 个答案:

答案 0 :(得分:9)

getline()函数需要istream string ,而不是整数。所以:

string sNumber;
getline(cin, sNumber);
// now convert sNumber to an unsigned int

答案 1 :(得分:2)

std::getline()添加到std::string变量中。您需要自己将其转换为unsigned int。通常的方法是使用std::istringstream实例,如下所示:

#include <sstream>
#include <iostream>
#include <iomanip>

int main ()
{
    std::string line;
    std::getline(std::cin, line);
    std::istringstream iss(line);

    unsigned int number = 0U;

    if (!(iss >> number))
    {
        // Handle error
    }
    else
    {   // Put your binary conversion logic in a function!
        std::cout << to_binary(number) << std::endl;
    }
}

提示:缩进可以极大地提高代码的可读性和可维护性。

将二进制转换逻辑放入函数将使测试更容易(想象"unit-test")并重用,如下所示:

// I've left this logic untouched other than to indent it and to introduce
// braces. It needs to be fixed. Declare before main().

std::string to_binary(unsigned int Number)
{
    std::ostringstream oss;

    bool Binary[sizeof(int) * CHAR_BIT];
    for (unsigned int i = 0; i < sizeof(int) * CHAR_BIT; i++)
    {
        Binary[(sizeof(int) * CHAR_BIT - 1) - i] = Number & (1 << i);
    }

    for(unsigned int i = 0; i < sizeof(int); i++)
    {
        oss << Binary[i] << std::endl;
    }

    return oss.str();
}

我已经将二进制转换逻辑更正为练习,因为这看起来像是家庭作业。

答案 2 :(得分:1)

getline只能用于以字符串形式读取整行。如果您想阅读数字,请使用operator>>

示例:

int number;
std::cin >> number;

答案 3 :(得分:1)

{{2p>以及为什么你不能使用getline()。 {{3P>

答案 4 :(得分:0)

以下是getline的有效签名:

istream& getline(char*, int, char = '\n');
istream& getline(signed char*, int, char = '\n');
istream& getline(unsigned char*, int, char = '\n');

您没有使用其中任何一个

答案 5 :(得分:-1)

getline(cin, Number)更改为cin >> Number