首页 > 解决方案 > 将对象指针数组初始化为 NULL

问题描述

我有一个项目需要创建一个对象指针数组,必须通过 init() 方法将其初始化为 NULL。这是代码:

HashLin *primHash[10];

void HashPerfect:: init() {         //FIX ME
for (int i=0; i<10; i++){
    primHash[i] = NULL;
}

我在尝试编译代码时收到以下错误消息:

hashperfect.cpp: In member function 'void HashPerfect::init()':
hashperfect.cpp:17:15: warning: passing NULL to non-pointer argument 1 of 
'HashLin::HashLin(int)' [Wconversion-null]
primHash[i] = NULL;
            ^

我觉得这可能与我的 HashLin 类的构造函数有关,但我不确定。如果这有助于诊断问题,这里是类 HashLin 的构造函数:

HashLin::HashLin(){
    //size = 0;
    hashTable = vector<string>(1);
    init();
};

HashLin::HashLin(int mySize){

    hashTable = vector<string>(mySize);

    init();
};

任何帮助是极大的赞赏!谢谢。

我的意图是创建一个指向 HashLin 对象的指针数组 - 这是 HashLin 对象类的代码......

#include <vector>
#include <string>
#include <iostream>
#include "HashLin.hpp"
using namespace std;


bool success;
vector<string> hashTable;

void HashLin:: init() {
    //hashTable = vector<string>(1);
    for (int i=0; i<hashTable.size(); i++)
        hashTable[i] = "";
}       

int HashLin:: hashMe(string myString) {

    //char foo[] = myString;


    char *s = new char[(myString.length())];
    unsigned int hash;
    for (hash = 0; *s != '\0'; s++)
        hash = 37*hash + *s;

    hash = hash % hashTable.size();


    return hash;

}





    HashLin::HashLin(){
        //size = 0;
        hashTable = vector<string>(1);
        init();
    };

    HashLin::HashLin(int mySize){

        hashTable = vector<string>(mySize);

        init();
    };

    bool HashLin:: insert(string insertMe){
        //hashMe(insertMe);
        int hashVal = hashMe(insertMe);

        success = false;
        int count = 0;

        while (hashVal < hashTable.size() && success==false && 
count<hashTable.size()) {

            if (hashTable[hashVal] == ""){
                hashTable[hashVal] = insertMe;
                success = true;
            }
            else if (hashVal == hashTable.size()-1)
                hashVal = 0;
            else{
                hashVal++;
                count++;
            }   


        }

        if (count == hashTable.size())
            cout << "Failed to Hash: " << insertMe << endl;
        return success;
    }

    void HashLin:: printOut(){

        for (int i=0; i<hashTable.size(); i++){
            cout << i << ": " << hashTable[i] << endl;
        }
    }

    int HashLin:: getSize(){
        return hashTable.size();

    }

    bool HashLin:: getSuccess(){
        return success;

    }

    void HashLin:: setSize(int toSet){
        hashTable.resize(toSet);
    }

标签: c++arrayspointershashnull

解决方案


尝试将 Objects 设置为 nullptr: primHash[i] = nullptr


推荐阅读