gpt4 book ai didi

c - 警告 : Incompatible pointer types assigning to 'node_t *' (aka 'struct node *' ) from 'mode_t' (aka 'unsigned int *' )

转载 作者:行者123 更新时间:2023-11-30 14:39:49 26 4
gpt4 key购买 nike

我们的项目是使用我们大学的一位教授开发的机器人和软件来制作一部电影。该库称为 MyroC,机器人利用该库实现许多功能。理想情况下,我们让机器人拍摄用户输入的许多帧(图片)。用户还可以选择将“场景”或小子电影插入到主电影中。

我是一名学习 C 语言的初学者。在我最近的学校项目中,我和我的搭档在使用 C 语言中的指针和链表时遇到了很多麻烦。我们了解为列表中的节点赋值和更改地址的基本思想,但我们不能似乎弄清楚我们的警告来自哪里。我们搜索了各种在线资源和文本来比较我们的代码语法,但我们没有发现哪里可能做错了什么。

这是我们的代码:

//This part is contained in a separate header file called "movie.h"

struct node { /* Singly-linked list nodes contain a Picture and point to next */
Picture frame;
node_t * next;
};

typedef struct node node_t; /* Shorthand type for nodes in the picture list */

typedef struct { /* Wrapper struct for the movie as a linked list */
node_t * first;
node_t * last;
} movie_t;

// This part is contained in a separate file called "movie.c"
// An appropriate reference is made to movie.h
// #include "movie.h"

movie_t
create (void)
{
movie_t movie = {NULL, NULL}; // initially create an empty movie
return movie;
} // movie

size_t
size (movie_t * movie)
{
unsigned int count = 0;
node_t * current = movie->first;
while (current != NULL) {
count++;
current = current->next;
}
return count;
} // size

bool
is_empty (movie_t * movie)
{
if (size(movie)==0) // movie contains no frames
return true;
else
return false; // movie contains frames
} // empty


bool
add (movie_t * movie, Picture frame) // add a frame to the end of the movie
{
int before_size = size(movie);

node_t * new_node;
new_node = malloc(sizeof(node_t));

if (new_node == NULL) {
printf("Error, malloc failed.\n");
exit(EXIT_FAILURE);
}

node_t * cursor = movie->first;
while(cursor->next != NULL) {
cursor=cursor->next;
}
cursor->next = new_node;
movie->last = new_node;
new_node->frame = frame;

if (before_size < size(movie) && (is_empty(movie)==false))
return true;
else
return false;
} // add


void // insert a frame before index
insert (movie_t * movie, movie_t * scene, unsigned int index)
{
node_t *insertion;
insertion = malloc(sizeof(node_t));
if (insertion == NULL) {
printf("Error, malloc failed.\n");
exit(EXIT_FAILURE);
}

insertion = movie->first;

for (unsigned int i = 0; i < index; i++) {
if (insertion != NULL)
insertion = insertion->next;
}
scene->last = insertion->next;
insertion->next = scene->first;

} // insert

终端输出

error: unknown type name 'node_t'; did you mean 'mode_t'?
node_t * next;
^~~~~~
mode_t
/usr/include/x86_64-linux-gnu/sys/types.h:70:18: note: 'mode_t' declared here

最佳答案

您的第一条错误消息揭示了一切。您在声明node_t之前就使用了它,您在它下面进行了声明。

事物在使用之前需要声明/定义。

所以移动...

typedef struct node node_t;   /* Shorthand type for nodes in the picture list */

所以就变成了……

typedef struct node node_t;   /* Shorthand type for nodes in the picture list */

//This part is contained in the header file "movie.h"
struct node { /* Singly-linked list nodes contain a Picture and point to next */
Picture frame;
node_t * next;
};

关于c - 警告 : Incompatible pointer types assigning to 'node_t *' (aka 'struct node *' ) from 'mode_t' (aka 'unsigned int *' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com