我正在使用c++中的有序链表制作一个哈希表来存储名称列表。
我一直得到一个编译错误在我的createhashTable函数。我试图创建一个空白表与虚拟节点从0 ->bucketsize我的代码是这样的:
class listNode{
public:
string firstName, lastName;
listNode* next;
listNode(){
firstName = "dummyfirst";
lastName = "dummylast";
next = NULL;
}
listNode(string firstName, string lastName){
this->firstName = firstName;
this->lastName = lastName;
this->next = NULL;
}
void printNode(listNode* node, ofstream* outFile){
if(node->next == 0) {
*outFile << "n";
}
else{
*outFile << "(" << node->firstName << "," << node->lastName << "," << node->next->firstName << ") --> ";
}
}
friend class hashTable;
}; //end of listNode class
class hashtable {
public:
char op;
string firstName, lastName;
int bucketSize;
listNode *hashArr;
void createHashTable(int bucketSize){
/////////////////
int i = 0;
// hashArr = new listNode[bucketSize];
while(i < bucketSize){
&hashArr[i] = new listNode[bucketSize];
i++;
}
}
我得到这个错误:
main.cpp: In member function ‘void hashtable::createHashTable(int)’:
main.cpp:51:42: error: lvalue required as left operand of assignment
&hashArr[i] = new listNode[bucketSize];
我怎样才能正确地实现这个功能。^
正如Werner Henze所说,&hashArr[i]
不能被修改,因为它是一个右值。在这个上下文中,这样的表达也没有意义。您正在尝试在堆上创建具有指定大小的数组。去掉前缀的地址,即hashArr[i] = new listNode[bucketSize];