Вам необходимо использовать защиту включения, как это:
#ifndef FOO_H
#define FOO_H
void foo(); //declaration
#endif
И в Foo.m
:
void foo() {
printf("Bar");
}
Или, что еще проще, вы можете просто использовать #import
директива:
#import "Foo.h"
Если вы сделали все вышеперечисленное, то единственный способ, которым это могло бы произойти, это если вы явно объявили новую функцию с тем же именем в другом файле