Не видя подробностей вашей программы, трудно сказать. Однако ошибки конфликтующих типов часто могут быть исправлены просто путем переупорядочения кода или добавления прототипов функций.
Вы видите, что функции должны быть описаны до их вызова при чтении исходного файла сверху вниз. например:
char foo1()
{
char blah = foo2();
return blah;
}
char foo2()
{
return 'a';
}
Вы хотите получить противоречивую ошибку типа, потому что, когда он находится внутри foo1
, он не видел заявления на foo2
еще. Таким образом, он предполагает, что независимо от того, что будет foo2
, он вернет int
. Но на самом деле он возвращает char
. Эти два не совпадают, поэтому ... сообщается о конфликтующем типе.
Вы можете это исправить, имея foo2
прийти первым в исходном коде, или путем вставки прототипа функции:
char foo2(); // function prototype
char foo1()
{
char blah = foo2();
return blah;
}
char foo2()
{
return 'a';
}
Вы также можете получить противоречивую тип ошибки, если вы включите исходные файлы, по той же причине , #include "Node.c"
- это, по сути, копия. Было бы неплохо перейти от Node.c
к включению Node.h
с внешними функциями. Вы также можете избежать множества проблем, если вы дадите префиксы своим именам функций в исходных файлах, которые вы планируете включить, например .... nodeInsert
, nodeDelete
, nodeCompare
и т. Д.
Наследование? В C? У вас есть занятия в C ??? –
Я бы начал с использования C++. Наследование в C - абсолютная девка. В стороне, такие вещи, как «Оба из них # включают файл Node.c», вызывают серьезные проблемы. Не включайте файлы .c друг в друга. Включите * declarations * (Node.h) в файл заголовка и сохраните единственную реализацию 'Node.c' * * в своем * собственном * исходном файле; НЕ включено в несколько исходных файлов. – WhozCraig
@ AndreyChernukha Я использовал слово Inheritance не в контексте самой C. Но да, должен был использовать ** Linking ** вместо этого. – maygnify