【发布时间】:2015-01-28 13:57:42
【问题描述】:
我在代码中有这个错误:
- 错误 C2143:语法错误:缺少 ';'在'之前
- 请参阅正在编译的类模板实例化“HashTable”的参考
- 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
- 错误 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指定一个类型,因为您将其声明为模板:std::vector<HashEntry<HashedObj>> array; -
_HASHTABLE_H是reserved name。您应该删除前导下划线。
标签: c++ class templates header