Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0806: `y` has 1 parameter but #[foo] requires it to have 0
What it meansAn externally implementable item is not compatible with its declaration.
What rustc prints
error[E0806]: `y` has 1 parameter but #[foo] requires it to have 0
--> main.rs:7:9
|
4 | fn x();
| ------- requires 0 parameters
5 |
6 | #[foo]
| ------ required because of this attribute
7 | fn y(a: u64) -> u64 {
| ^^^ expected 0 parameters, found 1Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
An externally implementable item is not compatible with its declaration.
Erroneous code example:
#![feature(extern_item_impls)]
#[eii(foo)]
fn x();
#[foo]
fn y(a: u64) -> u64 {
//~^ ERROR E0806
a
}
fn main() {}
The error here is caused by the fact that y implements the externally implementable item foo. It can only do so if the signature of the implementation y matches that of the declaration of foo. So, to fix this, y's signature must be changed to match that of x:
#![feature(extern_item_impls)]
#[eii(foo)]
fn x();
#[foo]
fn y() {}
fn main() {}
One common way this can be triggered is by using the wrong signature for #[panic_handler]. The signature is provided by core.
#![no_std]
#[panic_handler]
fn on_panic() -> ! {
//~^ ERROR E0806
loop {}
}
fn main() {}
Should be:
#![no_std]
#[panic_handler]
fn on_panic(info: &core::panic::PanicInfo<'_>) -> ! {
loop {}
}
fn main() {}From rustc --explain E0806 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?