我正在尝试使用find函数从哈希表中返回数组@element
的地址。但是,我收到了编译器错误:
QuadraticProbing.cpp:134:59: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
return isActive( currentPos ) ? wordElement : ITEM_NOT_FOUND;
基本上,我只想返回指向@element
的指针。所以我尝试创建指针wordElement
到@element
并尝试返回wordElement
。但那没用。这是我的代码片段,我无法弄清楚如何在HashEntry中获取指向@element
的指针。
//Main
int main()
{
QuadraticHashTable<char*> table(100);
table.insert("HELLO WORLD");
if (table.find(document[i]) == NULL))
cout << "OH NO!";
}
//Class that has element that I want to return in find.
template <class HashedObj>
class QuadraticHashTable
{
public:
QuadraticHashTable()
const HashedObj & find( const HashedObj & x ) const;
enum EntryType { ACTIVE, EMPTY, DELETED };
private:
struct HashEntry
{
char element[20];
EntryType info;
HashEntry( const HashedObj & e = HashedObj( ), EntryType i = EMPTY )
: info( i )
{
if (e != NULL)
strcpy(element, e);
}
};
vector<HashEntry> array;
//Find Function
template <class HashedObj>
const HashedObj & QuadraticHashTable<HashedObj>::find( const HashedObj & x ) const
{
int currentPos = findPos( x );
const char * wordElement = array[currentPos].element;
return isActive( currentPos ) ? wordElement : ITEM_NOT_FOUND;
}
答案 0 :(得分:2)
connected 0 (Link 0 j d) = (j,d)
QuadraticHashTable<char*> table(100);
table.insert("HELLO WORLD");
是HashedObject
您将char*
传递给期待"HELLO WORLD"
的{{1}}。
insert
适用于顶级,因此它是const HashedObject&
而不是const
(这将是一个不同的错误)。
鉴于您的条目基本上是char* const&
以及您如何编写条目,此代码仅在const char*&
是原始C字符串时才有效。模板参数没有写入。所以就是这样。
但char[20]
作为模板参数是使代码编译的另一种方法。但实际上,只使用一种类型的模板是没有意义的。