Thread: does this compile for anyone?

  1. #1
    Registered User
    Join Date
    Jul 2012
    Location
    Australia
    Posts
    242

    does this compile for anyone?

    I am getting an error message that I think is a problem with gcc, not the code itself. Thanks.

    Code:
    /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o||In function `_start':|
    (.text+0x20)||undefined reference to `main'|
    ||=== Build finished: 1 errors, 0 warnings ===|
    Code:
    #include <stdio.h>
    #include <string.h>
    
    #include "list.h"
    
    void list_init(List *list, void (*destroy) (void *data))
    {
        // Initialise the list.
        list->size = 0;
        list->destroy = destroy;
        list->head  = NULL;
        list->tail = NULL;
    
        return ;
    }
    
    void list_destroy(List *list)
    {
        void *data;
    
        // remove each element.
        while (list_size(list) > 0)
        {
            if (list_rem_next(list, NULL, (void **)&data) == 0 && list->destroy != NULL)
            {
                // Cal a user-defined function to free dynamically allocated data.
                list->destroy(data);
            }
        }
    
        // No operations are allowed now, but clear the structure as a precaution.
        memset(list, 0, sizeof(List));
    
        return ;
    }
    
    int lists_ins_next(List *list, ListElmt *element, const void *data)
    {
        ListElmt *new_element;
    
        // Allocate storage for the element.
        if ((new_element = (ListElmt *)malloc(sizeof(ListElmt))) == NULL)
        {
            return -1;
        }
    
        // insert the element into the list
        new_element->data = (void *)data;
    
        if(element == NULL)
        {
            // Handle insertion at the head of the list.
            if(list_size(list) == 0)
            {
                list->tail = new_element;
            }
            new_element->next = list->head;
            list->head = new_element;
        }
            else
            {
                // Handle insertion somewhere other than at the head;
                if(element->next == NULL)
                {
                    list->tail = new_element;
                }
                new_element->next = element->next;
                element->next = new_element;
            }
    
            // Adjust the size of the list to account for the inserted element.
            list->size++;
    
            return 0;
    }
    
    int list_rem_next(List *list, ListElmt *element, void **data)
    {
        ListElmt *old_element;
    
        // Do not allow removal from an empty list.
        if(list_size(list) == 0)
        {
            return -1;
        }
    
        // Remove the element from the list.
        if(element == NULL)
        {
            // Handle removal from the head of the list.
            *data = list->head->data;
            old_element = list->head;
            list->head = list->head->next;
    
            if(list_size(list) == 1)
            {
                list->tail = NULL;
            }
        }
        else
        {
            // Handle removal from somewhere other than the head.
            if(element->next == NULL)
            {
                return -1;
            }
            *data = element->next->data;
            old_element = element->next;
            element->next = element->next->next;
    
            if(element->next == NULL)
            {
                list->tail = element;
            }
        }
        free(old_element);
    
        // Adjust the size of the list to account for the removed element.
        list->size--;
    
        return 0;
    }
    list.h
    Code:
    #ifndef LIST_H
    #define LIST_H
    
    #include <stdlib.h>
    
    // Define a structure for linked list elements.
    typedef struct ListElmt_ {
        void *data;
        struct ListElmt_ *next;
    } ListElmt;
    
    // Define a structure for linked lists.
    typedef struct List_ {
        int size;
        int (*match)(const void *key1, const void *key2);
        void (*destroy)(void *data);
    
        ListElmt *head;
        ListElmt *tail;
    } List;
    
    void list_init(List *list, void (*destroy)(void *data));
    void list_destroy(List *list);
    int list_ins_next(List *list, ListElmt *element, const void *data);
    int list_rem_next(List *list, ListElmt *element, void **data);
    
    #define list_size(list) ((list)->size)
    #define list_head(list) ((list)->head)
    #define list_tail(list) ((list)->tail)
    #define list_is_head(list, element) ((element) == (list)->head ? 1 : 0)
    #define list_is_tail(element) ((element)->next == NULL ? ! : 0)
    #define list_data(element) ((element)->data)
    #define list_next(element) ((element)->next)
    
    #endif
    Last edited by cfanatic; 09-17-2012 at 11:17 PM. Reason: added list.h
    IDE: Code::Blocks | Compiler Suite for Windows: TDM-GCC (MingW, gdb)

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    28,323
    You attempted to build the program without the main function. If you only want to compile this source file, then do so accordingly.
    Quote Originally Posted by Bjarne Stroustrup (2000-10-14)
    I get maybe two dozen requests for help with some sort of programming or design problem every day. Most have more sense than to send me hundreds of lines of code. If they do, I ask them to find the smallest example that exhibits the problem and send me that. Mostly, they then find the error themselves. "Finding the smallest program that demonstrates the error" is a powerful debugging tool.
    Look up a C++ Reference and learn How To Ask Questions The Smart Way

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Can't compile anything
    By beanroaster in forum C++ Programming
    Replies: 8
    Last Post: 07-15-2008, 06:17 PM
  2. compile once, compile twice ...error
    By Benzakhar in forum Windows Programming
    Replies: 6
    Last Post: 12-28-2003, 06:00 AM
  3. Replies: 3
    Last Post: 03-07-2003, 09:06 PM
  4. Won't compile, can YOU compile it on your compiler?
    By incognito in forum C++ Programming
    Replies: 12
    Last Post: 03-10-2002, 12:00 PM