0

这是我收到错误的一行代码,在我 2008 年的书中:std::cin.get(std::cin.rdbuff()->in_avail()+1);

有人可以告诉我这意味着什么以及为什么它给我一个错误:

In function 'int main()':|7|error: 'struct std::istream' has no member named 'rdbuff'|
||=== Build finished: 1 errors, 0 warnings ===|

- 更新 -

将 rdbuff 更改为rdbuf,并引发此错误:

walkthrough.cpp|7|error: no matching function for call to 'std::basic_istream<char, std::char_traits<char> >::get(std::streamsize)'|
4

2 回答 2

4

调用成员函数rdbuf(),一个f,粗略地看一下任何库引用都会很容易地发现。

换句话说,错误是istream没有名为 的成员rdbuff

于 2011-11-15T11:48:15.437 回答
2

Kerrek SB 已经告诉你错误的原因:它是rdbuf,不是rdbuff

现在看看这段代码试图做什么:它试图强制执行阻塞读取(也就是说,它试图强制程序等待用户输入某些内容,即使在到达该语句之前已经输入了未读的内容)。in_avail给出“可用”的字符数,即保证您可以在不阻塞的情况下读取多少字符,即程序不必等待用户输入更多字符。

然而,这行代码有些误导,因为不能保证读取下一个字符阻塞。因此在某些系统上可能会发生此行在某些情况下仍然不等待用户输入。

即使在这种情况下,输入流通常会留下第一个字符被删除的行,但其余字符可用,如果它不是以空行开头,可能会在进一步读取时给出令人惊讶的结果。

于 2011-11-15T12:10:17.650 回答