"使用未声明的类型名称"使用泛型类型时

时间:2015-07-12 18:17:24

标签: types rust

我正在编写Rust中并发字典的基本结构,首先简单地将现有的HashMap包装在Arc::new(Mutex::new(hash_map_placeholder))中。然而,几乎在我开始的时候,事情就开始变得糟透了。我将<K, V>值传递给普通的HashMap时遇到问题,所以我甚至无法从包装版本开始。我目前收到以下错误:

concurrent_dictionary.rs:11:39: 11:40 error: use of undeclared type name `K`
concurrent_dictionary.rs:11 impl Default for ConcurrentDictionary<K, V> {
                                                              ^
concurrent_dictionary.rs:11:42: 11:43 error: use of undeclared type name `V`
concurrent_dictionary.rs:11 impl Default for ConcurrentDictionary<K, V> {

我所知道的是与未正确传递的类型名称有关。怎么做到这一点?即使我摆脱了默认的impl,我仍然需要为ConcurrentDictionary::new()编写相同的内容。这是代码:

use std::collections::HashMap;
use std::default::Default;

#[derive(Clone)]
pub struct ConcurrentDictionary<K, V> {
    data: HashMap<K, V>, 
}

impl Default for ConcurrentDictionary<K, V> {
    #[inline]
    fn default() -> ConcurrentDictionary<K, V> {
        ConcurrentDictionary {
            data: HashMap::<K, V>::new(),
        }   
    }   
}

impl<K, V> ConcurrentDictionary<K, V> {
    #[inline]
    pub fn new() -> ConcurrentDictionary<K, V> {
        Default::default()
    }   
}

1 个答案:

答案 0 :(得分:3)

您需要声明您使用的任何泛型类型:

impl<K, V> Default for ConcurrentDictionary<K, V> {

之后,您遇到KV 泛型的问题,您需要将它们限制为实现Eq和{的类型{1}}:

Hash

您需要对调用函数应用相同的限制。