2013-10-28 7 views
6

Podczas kompilacji jakiś plik Arduino C pojawia się błąd "niezdefiniowana odniesienia do `readArms()'"Arduino C: niezdefiniowane odniesienia do `readArms() '

Kod można znaleźć na paste bin.

Ale w zasadzie to, co się dzieje:

W pliku INO używam:

która jest zadeklarowana w "armfunctions.h" i "armfunctions.c"

.h plik zawiera

void readArms(void); 

a plik .c:

void readArms(void){ 
    float motor1 = 0.0; 
    int motor = 0; 
    motor = analogRead(READMOTOR1); 
    motor1 = (float)motor; 
    motor1 = (motor1 - 87.0) * (400.0/(1007.0-87.0)); 
    delay(1000); 
} 
+3

Czy przekazałeś '' armfunctions.c "' do kompilatora? – Sadique

+0

Tak, wszystkie te pliki starzeją się w tym samym folderze, a wszystkie pojawiają się w SDK arduino po otwarciu pliku .INO – DutchGabber

+1

Zmiana armfunctions.c na armfunctions.cpp rozwiązał problem – DutchGabber

Odpowiedz

24

I zostały badania tego przez kilka godzin dzisiaj, wytwarzania i testowania różnych szkiców i odkryli, (jak już stwierdzono) zmieniając je do .cpp jest obejście tego problemu, ale jeśli chcesz utworzyć plik specjalnie AC, musisz zawinąć prototypy do nagłówka, aby go skompilować. Istnieje kilka dobrych posty o tym, ale sedno problemu, w pliku .h umieścić:

#ifdef __cplusplus 
extern "C" { 
#endif 

void readArms(void); 

#ifdef __cplusplus 
} 
#endif 
+2

pracował jak rozkosz! –

-2

Należy użyć następujących w pliku .c:

void armfunctions :: readArms (void) ... (część przed :: to twoja nazwa klasy w twoim pliku .h)

+1

'c' jest rozszerzeniem pliku kodu źródłowego C, a nie C++. Przestrzenie nazw i klasy nie istnieją w C. Pisanie kodu C++ w pliku C nie jest poprawnym rozwiązaniem. – 2mac