【问题标题】:Use of undeclared unstable module when module is imported and a cfg attribute is used导入模块并使用 cfg 属性时使用未声明的不稳定模块
【发布时间】:2017-10-30 04:07:45
【问题描述】:

我有以下代码:

#[cfg(all(feature = "unstable", unique))]
#[cfg(all(feature = "unstable", heap_api))]
#[cfg(all(feature = "unstable", alloc))]

use std::ptr::Unique;
use std::mem;
use alloc::heap;

pub struct Foo<T> {
    arr: Unique<T>,
    cap: usize,
    probe_limit: usize,
}

但是,当我尝试使用 cargo build --features "unstable" 编译它时,我得到一个编译错误。请注意,我使用的是 Rust 的夜间版本,并且不稳定的功能设置正确(否则我会得到不同的错误)。

error[E0412]: cannot find type `Unique` in this scope
  --> src/hash/arr.rs:27:8
   |
27 |   arr: Unique<T>,
   |        ^^^^^^ not found in this scope
   |
help: possible candidate is found in another module, you can import it into scope
   | use std::ptr::Unique;

我不确定为什么找不到Unique。我应该在我的文件顶部使用它。 use ::std::ptr::Unique 不起作用。

【问题讨论】:

    标签: import module rust


    【解决方案1】:

    让我们解构你的 cfg 指令:

    #[cfg(all(feature = "unstable", unique))]
    

    这是一个outer 属性,意味着它在将要更改的项目之外,并将应用于下一个项目。使用cfg 属性,表示“如果括号内的功能启用,则执行下一个块”,all 是功能之间的 AND。所以你有类似“如果启用了不稳定和独特的功能,请执行下一条语句。

    Attributes!如果您在命令行上设置了unstable 功能,您想要的是有条件地拥有inner 属性feature(unique)。可以通过cfg_attr获取条件属性。

    #![cfg_attr(feature = "unstable", feature(unique))]
    

    这可以读作好像启用了功能unstable,然后启用内部feature(unique)。然后你就可以使用std::ptr::Unique了。

    您还应该在use 和您的struct 之前添加#[cfg(feature = "unstable")],这样如果未启用该功能,它们将无法使用。

    【讨论】:

    • 我相信这是在解决另一个问题。当我重新安排进口订单时,我的问题似乎得到了解决。如果我先导入堆,然后是唯一的,然后是内存,它工作正常。
    猜你喜欢
    • 2021-02-26
    • 2019-11-13
    • 2018-06-25
    • 2021-01-04
    • 2021-05-20
    • 2020-07-26
    • 2021-11-04
    • 2021-01-25
    • 2017-03-25
    相关资源
    最近更新 更多