刷leetcode,写成如下的时候这样报错

struct ListNode *result = new ListNode();

一开始连结构体都没有初始化,然后就改成了这样。太久不用C++忘了很多。

结构体指针在使用之前必须通过初始化或赋值操作,把某个结构体变量的首地址赋给它,使它指向该结构体变量。

现在的报错内容为

error: no matching function for call to 'ListNode:ListNode()'

之后在网上查了查关于结构体的内容也没查到想要的,然后去翻了翻书,发现大部分C++的书都没有谈及结构体的内容,就去翻了C的书。

以下是结构体定义的内容。

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}

用本地的IDE试了一下,简化成以下代码

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
int main()
	 ListNode result, *presult;
	 presult = &result;//结果位
    return 0;

这个时候,result画红线的错误提示是‘类ListNode不存在默认构造函数 ’。

这个地方还不是很懂为什么会把ListNode判断成类,不过我觉得可能是IDE觉得他们本来就差不多也没有认真判断。

出错的原因在这:

ListNode result;

因为在结构体里面定义了构造函数就要用,所以这个result其实没什么用,把这段代码改成如下

struct ListNode* presult = new ListNode(0);

------------------------------------------------------------------------------------------------------------------------------------------

做这个题做了好久,因为之前基本上没做过题所以就当从头开始了....

数据结构学的不好所以对链表的理解有些问题,这个题更简单的方法应该是直接把结果放在l1里面,我用的方法就是新建了一个presult的链表,然后中间因为忘记了链表怎么插入出错

 struct ListNode* insert = new ListNode(add%10);
            struct ListNode* result = presult;
            while(result->next != NULL)
            {result = result->next;}
            insert->next = result -> next;
            result->next = insert;

这是正确的操作

之前我甚至都没有用result这个指针直接往presult后面插。。

附全部代码,写的很复杂很复杂。。。。

* Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { /*Initialize current node to dummy head of the returning list*/ struct ListNode *presult = new ListNode(0); /*Initialize carry and the result of add*/ int carry = 0; int add = 0; /*loop until both ends*/ while(l1 != NULL || l2 != NULL ) /*if l1 come to end only, make it zero*/ if (l1 == NULL) add = l2 -> val + carry; }else if(l2 == NULL) /*if l2 come to end only, make it zero*/ add = l1 -> val + carry; }else{ /*if none of them come to an end then add them with carry*/ if(l1!= NULL &&l2!= NULL){ add = l1 -> val + l2 -> val + carry; /*add the result to the end of the list presult*/ struct ListNode* insert = new ListNode(add%10); struct ListNode* result = presult; while(result->next != NULL) {result = result->next;} insert->next = result -> next; result->next = insert; /*calculate the next carry*/ if(add >= 10) carry = 1; }else{ carry = 0; /*advance l1&l2*/ if(l1 != NULL) l1 = l1->next; if(l2!= NULL) l2 = l2->next; presult = presult->next; //if the result is more struct ListNode* result = presult; while(result->next != NULL) {result = result->next;} if(carry == 1) result ->next = new ListNode(0); result->next->val = 1; result -> next -> next = NULL; }else{ result-> next = NULL; return presult; 刷leetcode,写成如下的时候这样报错struct ListNode *result = new ListNode();一开始连结构体都没有初始化,然后就改成了这样。太久不用C++忘了很多。结构体指针在使用之前必须通过初始化或赋值操作,把某个结构体变量的首地址赋给它,使它指向该结构体变量。现在的报错内容为error: no matching function for c...
Pampy.js:JavaScript模式匹配 Pampy.js非常小(250行,没有依赖项),相当快,并且通常使您的代码更具可读性,并且更易于推理。 还有一个Pampy的。 你可以写很多图案 模式按照它们出现的顺序进行评估。 你可以写斐波那契 运算符_的意思是“我没有想到的其他任何情况”。 如果已经使用_ ,则可以要求ANY ,这是完全相同的。 let { match , _ } = require ( "pampy" ) ; function fib ( n ) { return match ( n , 1 , 1 , 2 , 1 ,
前几天按照YOLO_v4的教程,想在ROS环境下运行YOLO算法,结果在编译的环节报错了,如下图所示。 百度搜索无果,后来用bing搜索终于找到了可行的参考解决方案,因为opCV版本的问题,我们需要在编译的时候加上一些额外的参数如下: catkin build darknet_ros --cmake-args -DCMAKE_CXX_FLAGS=-DCV__ENABLE_C_API_CTORS 具体的原因在链接中解释的比较明白了: I think I found the way to fix the p
================================================================= ==31==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000000084 at pc 0x0000003aa169 bp 0x7ffd45a6d850 sp 0x7ffd45a6d848 READ of size 4 at 0x603000000084 thread T0 error: no matching function for call to 'ListNode:ListNode()' 错误原因为结构体ListNode的变量在使用前没有进行初始化操作 另外,结构体变量的指针在使用之前也需要初始化或赋值操作,将原来代码中的ListNode A,改为ListNode A(0),编译成功