Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > gcc ругаеться на совпадающие имена


Автор: Proger89 6.4.2010, 00:24
Доброго времени суток.
Недавно возникло желание изучить различные структуры данных, а во время изучения написать себе маленькую либу.
Но у меня возникла одна проблема и я никак не могу её преодолеть.
У меня есть реализация линейного списка и на основе него я хотел написать стек. Вот объявление списка:
Код

 // Структура узла связного списка
    struct node
    {
        void *p_data; // Данные
        pnode p_next; // Следующий узел
        pnode p_prev; // Предыдущий узел
    };

    // Структура связного списка
    struct l_list
    {
        pnode p_head; // Заголовочный элемент
        pnode p_tail; // Концевой элемент
        comp_func c_func; // Функция сравнения
    };

    typedef struct l_list linked_list;

    ...

   int is_empty(linked_list l);

    ...


а вот стека:
Код

    struct sstack
    {
        linked_list *p_list;
        int number_of_elements;
    };

    typedef struct sstack stack;

   ...

   int is_empty(stack s);


Как видно в обоих файлах есть функция is_empty() но у них разные сигнатуры.
gcc выдает следующее:
Код

In file included from structures/stack.c:2:
structures/stack.h:36: error: conflicting types for ‘is_empty’
structures/linear_list.h:73: note: previous declaration of ‘is_empty’ was here
structures/stack.c:11: error: conflicting types for ‘is_empty’
structures/linear_list.h:73: note: previous declaration of ‘is_empty’ was here

То есть ругаеться на объявление и на реализацию фукнции.
Как можно обойти эту проблему не меняя название фукнции? Почему gcc вообще выдает ошибку, ведь у фукнций разная сигнатура?

Заранее благодарен.

Автор: borisbn 6.4.2010, 06:13
Если не ошибаюсь, в Си (а у тебя именно Си, а не Си++) не было возможности перегружать функции. Переименуй свои файлы из *.c в *.cpp

Автор: Proger89 6.4.2010, 09:10
Цитата(borisbn @ 6.4.2010,  06:13)
Если не ошибаюсь, в Си (а у тебя именно Си, а не Си++) не было возможности перегружать функции. Переименуй свои файлы из *.c в *.cpp

Спасибо. Я просто думал что такая фундаментальная возможность должна быть в С.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)