微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

(C++) 这个错误是关于什么的:左值需要作为赋值的左操作数

如何解决(C++) 这个错误是关于什么的:左值需要作为赋值的左操作数

我正在使用 C++ 中的有序链表创建一个哈希表来存储名称列表。

我的 createhashTable 函数不断出现编译错误。我正在尝试创建一个空白表,其中包含 0 -> 桶大小的虚拟节点 我的代码如下所示:

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];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。