2016-04-07 79 views
8

我试图从stdin读取单个字符,但我无法正常工作。在不同的程序中,我使用了完全相同的方法,它工作。为什么`std`模块未声明?

let mut buffer = [0]; 
let _ = std::io::stdin().read(&mut buffer); 
let a = buffer[0]; 

编译它给出了这样的错误:

src/befunge.rs:220:17: 220:31 error: failed to resolve. Use of undeclared type or module `std::io` [E0433] 
src/befunge.rs:220  let _ = std::io::stdin().read(&mut buffer); 
+0

如果对SO提出问题,请尽可能提供[MCVE](http://stackoverflow.com/help/mcve),以便客观地检查答案以解决问题。举例来说,这可能是[这个简单的程序](https://play.rust-lang.org/?gist=43e3a4de6103ca986767bd304f54fe5e&version=stable&backtrace=0)。 –

回答

17

我认为befunge.rs是不是你的箱子根,而是一个子模块。在use ...;声明之外使用的像std::io::stdin()之类的路径与当前模块相关,而不是绝对路径。为了使路径绝对,前缀::(如在unix路径中的前缀/) - >::std::io::stdin()。在如果您使用的是子路径

use std; 
std::io::stdin(); 

use std::io; 
io::stdin(); 

,像std::io不止一次你的模块中,它通常最好use它:或者你可以use路径的某些部分,如顶端。

如果您处于箱根,::stdstd之间没有区别,因为相对查找路径是根。它只在子模块中很重要。另外:use声明中的路径总是绝对的 - 使它们相对于当前模块前缀self::

+0

我有一个新的问题,它不解决这些解决方案。我编辑了主帖。 – Fluffy

+0

请每个SO线程只询问一个问题。所以你理论上应该为你的编辑创建一个单独的问题。但是:这个问题已经在SO上得到了回答,所以更好地寻找这个问题。剧透:只读了编译器的全部错误信息(包括注释)。 –

+1

我们是否有理由让“使用”不同,这是绝对的,而不是相对于当前模块? – WiSaGaN

相关问题