Связанные списки в C. ошибка: конфликтующие типы. Решение?

у меня определена следующая структура:

typedef struct PList{
    Person person;
    struct PList *nextPerson;  //  set to NULL by default <<<<<
}PList;

и этот метод:

int length(struct PList* db){
    PList* cur = db;
    int size = 0;
    while (cur != NULL){
    ++size;
    cur = cur->nextPerson;
}
    return size;
}

ошибка: конфликтующие типы для «длины» выбрасываются в сигнатуру для метода длины.

Любые идеи?


person mangusbrother    schedule 28.11.2012    source источник
comment
У вас есть конфликтующее объявление или определение length где-то в вашем коде.   -  person Fred Foo    schedule 28.11.2012
comment
У вас есть определение функции, которое не соответствует сигнатуре объявления функции.   -  person asheeshr    schedule 28.11.2012


Ответы (1)


На самом деле это означает, что в вашей структуре исходного кода есть еще одна функция/объявление с именем length, имеющая другую сигнатуру функции.

Найдите, где определена функция length(), и передайте корректные объекты структуры этой функции (типа struct PList или PList*)

person Aniket Inge    schedule 28.11.2012
comment
Значит, у вас не может быть 3 методов, которые принимают в качестве параметров разные структуры? Перегружаешь как-то.. - person mangusbrother; 28.11.2012
comment
Нет, не на C, но можно и на C++. - person Paul R; 28.11.2012
comment
Вы не можете выполнять перегрузку функций в C. Однако это возможно в C++ - person Aniket Inge; 28.11.2012
comment
В C++, хотя вы можете технически перегрузить глобальную функцию (такую ​​как length) для разных типов классов, обычно можно сделать length методом класса. Таким образом, foo.length() более идиоматичен, чем length(foo)... *большую часть* времени. - person HostileFork says dont trust SE; 28.11.2012
comment
да, но я не думаю, что можно сделать что-то подобное, поскольку C не является объектно-ориентированным. Я также не думаю, что на самом деле это возможно реализовать, используя что-то вроде общей структуры, поскольку я не думаю, что для структур реализовано что-то вроде наследования. - person mangusbrother; 28.11.2012