我正在尝试修复Rustboot,因此它将使用i686-unknown-linux-gnu在Rust 1.8.0中构建并运行。我有两个主要错误,我似乎无法修复,这些是:
main.rs:50:5: 54:6 error: the trait `core::iter::Iterator` is not implemented for the type `IntRange` [E0277]
main.rs:50 for i in range(0, 80 * 25) {
main.rs:51 unsafe {
main.rs:52 *((0xb8000 + i * 2) as *mut u16) = (background as u16) << 12;
和
main.rs:52:15: 52:44 error: the type of this value must be known in this context
main.rs:52 *((0xb8000 + i * 2) as *mut u16) = (background as u16) << 12;
关于为什么会发生这种情况的任何想法,以及我如何解决它?
链接到Rustboot main.rs文件:http://pastebin.com/wyDywYN8
答案 0 :(得分:0)
IntRange
未实现core::iter::Iterator
,因此自然不能在for
循环中使用。关于i
类型的错误是相关的 - 因为IntRange
没有实现Iterator
,所以当它被用作一个时,其项目的类型是未知的。
您应该实施Iterator
而不是提供next()
作为固有方法:
use core::iter::Iterator;
impl Iterator for IntRange {
type Item = i32;
fn next(&mut self) -> Option<i32> {
// your implementation
}
}
这可能还不够,因为for
循环也依赖Option
,但我现在不记得它是lang项目还是完整路径查找