Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
688f6073
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
688f6073
编写于
2月 03, 2016
作者:
M
Manish Goregaokar
浏览文件
操作
浏览文件
下载
差异文件
Rollup merge of #31347 - GuillaumeGomez:fix_E0118, r=Manishearth
r?
@EddyB
上级
f55995ba
db63a55b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
39 addition
and
12 deletion
+39
-12
src/librustc_typeck/coherence/orphan.rs
src/librustc_typeck/coherence/orphan.rs
+6
-3
src/librustc_typeck/diagnostics.rs
src/librustc_typeck/diagnostics.rs
+33
-9
未找到文件。
src/librustc_typeck/coherence/orphan.rs
浏览文件 @
688f6073
...
...
@@ -209,9 +209,12 @@ fn check_item(&self, item: &hir::Item) {
return
;
}
_
=>
{
span_err!
(
self
.tcx.sess
,
item
.span
,
E0118
,
"no base type found for inherent implementation;
\
implement a trait or new type instead"
);
struct_span_err!
(
self
.tcx.sess
,
item
.span
,
E0118
,
"no base type found for inherent implementation"
)
.span_help
(
item
.span
,
"either implement a trait on it or create a newtype to wrap it
\
instead"
)
.emit
();
return
;
}
}
...
...
src/librustc_typeck/diagnostics.rs
浏览文件 @
688f6073
...
...
@@ -1489,22 +1489,46 @@ fn get(&self) -> usize { 0 }
"##
,
E0118
:
r##"
Rust can't find a base type for an implementation you are providing, or the type
cannot have an implementation. For example, only a named type or a trait can
have an implementation:
You're trying to write an inherent implementation for something which isn't a
struct nor an enum. Erroneous code example:
```
type NineString = [char, ..9] // This isn't a named type (struct, enum or trait)
impl NineString {
// Some code here
impl (u8, u8) { // error: no base type found for inherent implementation
fn get_state(&self) -> String {
// ...
}
}
```
To fix this error, please implement a trait on the type or wrap it in a struct.
Example:
```
// we create a trait here
trait LiveLongAndProsper {
fn get_state(&self) -> String;
}
// and now you can implement it on (u8, u8)
impl LiveLongAndProsper for (u8, u8) {
fn get_state(&self) -> String {
"He's dead, Jim!".to_owned()
}
}
```
In the other, simpler case, Rust just can't find the type you are providing an
impelementation for:
Alternatively, you can create a newtype. A newtype is a wrapping tuple-struct.
For example, `NewType` is a newtype over `Foo` in `struct NewType(Foo)`.
Example:
```
impl SomeTypeThatDoesntExist { }
struct TypeWrapper((u8, u8));
impl TypeWrapper {
fn get_state(&self) -> String {
"Fascinating!".to_owned()
}
}
```
"##
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录