-3
    //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&)’
  */

    }
4

1 回答 1

0

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

于 2019-01-15T15:38:53.923 回答