无法指定指向另一个指针的指针

时间:2015-11-27 18:20:34

标签: c++

我需要一些帮助来解决我遇到的错误。

Error- C2440- 'initializing':cannot convert from 'DATAHash<ItemType>' to 'DATAHash<ItemType> *'

我正在使用Visual Studio。

template<typename ItemType>
class Hash
{
private:
    int tablesize;
    /// Creating a Hashtable of pointer of the (class of data type)
    DATAHash<ItemType>*        Hashtable;

对于Hash类,我的默认构造函数是

template<typename ItemType>
Hash<ItemType> ::Hash(int size)
{
    tablesize = size;
    Hashtable[size]; // make array of item type

    for (int i = 0; i< size; i++)
        Hashtable[i] = NULL;

    loadfactor = 0;
}

这是我的错误

/// This is add function
/// It adds the data that is passed as a parameter
/// into the Hash table
template<typename ItemType>
void Hash<ItemType>::additem(ItemType data)
{
    DATAHash<ItemType> * newdata = new DATAHash<ItemType>(data);

    /// gets the data as a parameter and calls Hash function to create an address
    int index = Hashfunction(data->getCrn());

    /// Checking if there if there is already a data in that index or no.
    DATAHash<ItemType> * tempptr = Hashtable[index];  <------- Error line

    // there is something at that index
    // update the pointer on the item that is at that index
    if (tempptr != nullptr)
    {

        // walk to the end of the list and put insert it there

        DATAHash<ItemType> * current = tempptr;
        while (current->next != nullptr)
            current = current->next;

        current->next = newdata;

        cout << "collision index: " << index << "\n";

        return;
    }

这是我第一次发帖提问,如果我还需要发帖,请告诉我。

感谢您的帮助。

-Rez

2 个答案:

答案 0 :(得分:2)

你需要得到这样的指针:

DATAHash<ItemType> * tempptr = &Hashtable[index];

但是我不确定这是你应该做的。您正在该指针上调用[]运算符,但您从不为其分配任何内存。

如何初始化Hashtable成员?

答案 1 :(得分:0)

因此,当您按照Hashtable[index]获取某个内容的索引时,您将获得实际值。 DATAHash<ItemType>*是类型指针,因此它包含一个地址。

我猜你想要的解决方案是使用Hashtable[index]的地址,所以你需要修改该行:

DATAHash<ItemType> * tempptr = &Hashtable[index];