如何创建指向数组类成员的指针?

时间:2017-02-26 08:06:14

标签: c++ arrays pointers

我正在尝试使用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;
    }

1 个答案:

答案 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]作为模板参数是使代码编译的另一种方法。但实际上,只使用一种类型的模板是没有意义的。