Closed
Description
This code is wrong because ToStr does not define new
. But what's odd is that the compiler error does not happen in the ToStr
block but in the main
:
struct Point {
mut x: float,
mut y: float,
}
impl Point : ToStr {
static fn new(x: float, y: float) -> Point {
Point { x: x, y: y }
}
pure fn to_str() -> ~str {
fmt!("(%f, %f)", self.x, self.y)
}
}
fn main() {
let p = Point::new(0.0f, 0.0f);
io::println(p.to_str());
}
Error message:
test.rs:17:12: 17:22 error: unresolved name
test.rs:17 let p = Point::new(0.0f, 0.0f);
^~~~~~~~~~
test.rs:17:12: 17:22 error: use of undeclared module `Point`
test.rs:17 let p = Point::new(0.0f, 0.0f);
^~~~~~~~~~
test.rs:17:12: 17:22 error: unresolved name: Point::new
test.rs:17 let p = Point::new(0.0f, 0.0f);
^~~~~~~~~~
error: aborting due to 3 previous errors
The expected error message would point to the impl
block that needs to be split into two (one with ToStr and one without a trait).