使用类创建节点的方法

way to create a node using class

本文关键字:方法 节点 创建      更新时间:2023-10-16
    //This is class for Linked list 
    class SinglyLinkedListNode {
        public:
            int data;
            SinglyLinkedListNode *next;
            SinglyLinkedListNode(int node_data) {
                this->data = node_data;
                this->next = nullptr;
            }
    };

      SinglyLinkedListNode*    insertNodeAtHead(SinglyLinkedListNode* head, int key  )
        {
            SinglyLinkedListNode* newNode = &SinglyLinkedListNode(key);

           /*1st way of creating a node sing a class constructor 
            error(i got for this) :error: taking address of temporary [-fpermissive]
           */



           SinglyLinkedListNode* newNode =  new(SinglyLinkedListNode );//2nd way of creating a node 
            newNode->data=key;
            newNode->next=NULL;//following error i got by second method

 /*solution.cc:59:66: error: no matching function for call to ‘SinglyLinkedListNode::SinglyLinkedListNode()’
        SinglyLinkedListNode* newNode =  new(SinglyLinkedListNode );//2nd way of creating a node
                                                                  ^
solution.cc:10:9: note: candidate: ‘SinglyLinkedListNode::SinglyLinkedListNode(int)’
         SinglyLinkedListNode(int node_data) {
         ^~~~~~~~~~~~~~~~~~~~
solution.cc:10:9: note:   candidate expects 1 argument, 0 provided
solution.cc:5:7: note: candidate: ‘constexpr SinglyLinkedListNode::SinglyLinkedListNode(const SinglyLinkedListNode&)’
  */
    }

当你写的时候new(SinglyLinkedListNode );您正在堆上创建类型为 SinglyLinkedListNode 的对象,编译器将尝试调用该对象的默认构造函数,但该类没有默认构造函数。如果你要写new SinglelyLinkedListNode( 6 );编译器将能够调用您拥有的唯一构造函数,该构造函数采用 int 参数。我的猜测是,这作为一个结构而不是一个类,因为结构没有任何CTOR,因此编译器能够为它创建一个默认的CTOR。