c++ - 将对象指针数组初始化为 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);
}
解决方案
尝试将 Objects 设置为 nullptr:
primHash[i] = nullptr