提问人:Rommel Bagasina 提问时间:10/1/2022 最后编辑:Allan WindRommel Bagasina 更新时间:10/1/2022 访问量:440
调用“number::number(void)”没有匹配函数
no matching function for call to 'number::number(void)'
问:
您好,我正在尝试编写链表代码,但它不起作用。Malloc 在第一个指针和最后一个指针返回一个不匹配的函数来调用。代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct number{
int x;
struct number *next;
}Number;
Number *first = NULL, *temp = NULL, *last = NULL;
void insert(int x){
if(first==NULL){
first= (Number)malloc(sizeof(Number));
first->x=x;
first->next = NULL;
temp=first;
}
else{
last = (Number)malloc(sizeof(Number));
last->x = x;
last->next = NULL;
temp->next =last;
temp=last;
}
}
void printList(){
Number *hold = first;
while(hold!=NULL){
printf("\n%d\n",hold->x);
hold = hold->next;
}
}
int main(){
int size;
printf("Enter size: ");
scanf("%d",&size);
Number *hold = first;
printf("Enter value:\n");
for(int i=0;i<size;i++){
int x;
scanf("%d",&x);
insert(x);
}
printfList();
}
这里可能有什么问题?
答:
1赞
Allan Wind
10/1/2022
#1
- 错误消息听起来像是用 c++ 而不是 c 编译器编译的。
Number
是 的 typedef,但您将其用作指针。在 c 中,我们不会投射 void 指针,所以就把它省略掉:struct Number
void insert(int x) {
if(first==NULL){
first = malloc(sizeof(Number));
first->x=x;
first->next = NULL;
temp = first;
} else {
last = malloc(sizeof(Number));
last->x = x;
last->next = NULL;
temp->next = last;
temp = last;
}
}
printfList()
应该是 .printList()
下面是一个执行示例:
Enter size: 3
Enter value:
1
2
3
1
2
3
我建议你去掉全局变量,并将它们传递到需要它们的函数中。,特别是 的实现细节。
temp
insert()
此外,不一致的格式意味着我立即不信任您的代码。格式对于可读性很重要,那么为什么要让自己感到困难呢?
0赞
abdo Salm
10/1/2022
#2
问题是您声明为该行中的指针first
Number *first = NULL, *temp = NULL, *last = NULL;
但是当你尝试使用 时,会返回一个类型的指针,所以你应该把它转换为 not,你应该 cast into 。malloc
malloc
void
(Number*)
(Number)
void pointer
Number pointer
所以而不是
first = (Number)malloc(sizeof(Number));
你应该做
first = (Number*)malloc(sizeof(Number));
参考 malloc() 手册作为 is 的原型malloc
void *malloc(size_t大小);
只是一个小小的语法错误,它不是
printfList();
它:
printList();
通过这些小的编辑,这是最终的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct number{
int x;
struct number *next;
}Number;
Number *first = NULL, *temp = NULL, *last = NULL;
void insert(int x){
if(first==NULL){
first = (Number*)malloc(sizeof(Number));
first->x=x;
first->next = NULL;
temp=first;
}
else{
last = (Number*)malloc(sizeof(Number));
last->x = x;
last->next = NULL;
temp->next =last;
temp=last;
}
}
void printList(){
Number *hold = first;
while(hold!=NULL){
printf("\n%d\n",hold->x);
hold = hold->next;
}
}
int main(){
int size;
printf("Enter size: ");
scanf("%d",&size);
printf("Enter value:\n");
for(int i=0;i<size;i++){
int x;
scanf("%d",&x);
insert(x);
}
printList();
}
这是一些示例输出:
Enter size:5
Enter value:
1
2
3
4
5
1
2
3
4
5
0赞
Fe2O3
10/1/2022
#3
你的“插入”逻辑(实际上是“附加”)是不稳定的。区域已分配,但返回的地址很快就会丢失。
void insert( int x ) {
temp = malloc( sizeof *temp ); // Make a node
/* omitting test for NULL */
temp->x = x; // populate its members
temp->next = NULL;
if( first == NULL )
first = temp; // all done!
else
last = last->next = temp; // all done here, too!
}
上一个:指导结构问题,你能帮我吗?
下一个:当我尝试调用函数时,它显示错误
评论