模板类:错误 C4430:缺少类型说明符 - 假定为 int.注意:C++不支持默认整数

Template Class: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

本文关键字:int 注意 不支持 整数 默认 C++ 说明符 错误 C4430 类型      更新时间:2023-10-16

我在代码中遇到了此错误:

    错误
  • C2143:语法错误:在"<"之前缺少";"
  • 请参阅对正在编译的类模板实例化"哈希表"的引用
  • 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++不支持默认整数
  • 错误 C2238:在";"之前出现意外令牌

在私有函数的这一行中发现错误:

vector<HashEntry> array;

    #ifndef _HASHTABLE_H
    #define _HASHTABLE_H
    #include <vector>
    enum EntryType { ACTIVE, EMPTY, DELETED };
    Template <class HashedObj>
    struct HashEntry
    {
    HashedObj element;
    EntryType info;
    HashEntry( const HashedObj & e = HashedObj( ), EntryType i = EMPTY )
    : element( e ), info( i ) { }
    };
    template <class HashedObj>
    class HashTable
    {
    private:
    vector<HashEntry> array;
    int currentSize;
    const HashedObj ITEM_NOT_FOUND;
    bool isActive( int currentPos ) const;
    int findPos( const HashedObj & x ) const;
    public: 
    explicit HashTable( const HashedObj & notFound, int size = 101 );
    HashTable( const HashTable & rhs )
    : ITEM_NOT_FOUND( rhs.ITEM_NOT_FOUND ),
    array( rhs.array ), currentSize( rhs.currentSize ) { }

    const HashedObj & find( const HashedObj & x ) const;
    void makeEmpty( );
    void insert( const HashedObj & x );
    void remove( const HashedObj & x );
    const HashTable & operator=( const HashTable & rhs );
     };
    #endif

如何修复此错误 C4430?

HashEntry本身就是一个模板类,不会自动从包含的类中推断出模板参数类型HashTable。您需要更改array声明,如下所示

template <class HashedObj>
class HashTable {
private:
    std::vector<HashEntry<HashedObj>> array;
                      // ^^^^^^^^^^^
    // ...
};
相关文章: