Our project is about creating a movie using a robot and software developed by one of our professors here at our college. The library is called MyroC, and the robots utilize this library for many functions. Ideally, we have the robot take a number of frames (pictures) the user inputs. The user will also have the option of inserting "scenes" or little sub-movies into the main movie.
I am a beginner coder studying the C language. In my most recent school project, my partner and I have been having a lot of trouble working with pointers and linked-lists in C. We understand the very basic ideas of assigning values to nodes in lists and changing addresses, but we can't seem to figure out where our warnings are coming from. We've searched various online sources and texts to compare our code syntax, and we don't see where we could be doing anything wrong.
Here is our code:
//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
The terminal outputs
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
Your first error message reveals all. You are using node_t before you have declared it, which you do below it.
Things need to be declared/defined before they are used.
So move...
So it becomes...