Moin! ich versuche gerade, mehrere Strings im Eeprom zu speichern und von dort auf einem Display auszugeben.... Nun habe ich folgendes Problem. Mit dem ersten String klappt alles wie erwartet. Will ich den zweiten String pcTitle2 aufrufen, so liefert mir der Linker folgenden Fehler (Linkeraufruf siehe unten): main.cpp: undefined reference to `PoelControl::pcTitle2' main.cpp lcdOut.writeStrgEeprom(pcTitle); lcdOut.writeStrgEeprom(pcTitle2); .cpp file: const char EEMEM pcTitle[] = "Test\0"; const char EEMEM pcTitle2[] = "Dummy\0"; .h file: const extern char EEMEM pcTitle[]; const extern char EEMEM pcTitle2[]; Ein vertauschen der Variablendeklarationen und -definitionen führt zum selben Ergebnis (und nicht umgekehrt, wie ich es erwarten würde) Im *.map-File ist auch nur pcTitle zu finden. Definier ich die Länge der char-Arrays bringt dies auch nichts....Die Terminierung der Strings mit \0 kann ich auch weglassen. Gleiches Resultat. Und nu? Hat jemand ne Idee, was ich da falsch mache? cu, Michael ------------------- Controller: AtMega32 Ide: WinAvr (current), Eclipse Linker Aufruf: Building target: dogDisplayCpp-I.elf Invoking: AVR-GCC C++ Linker avr-g++ -o "dogDisplayCpp-I.elf" ./main.o ./libpoel/tools/Delay.o ./libpoel/tools/OutputTools.o ./libpoel/tools/TimingMgr.o ./libpoel/peripherals/Ad.o ./libpoel/peripherals/Interrupts.o ./libpoel/peripherals/Spi.o ./libpoel/peripherals/Timer.o ./libpoel/peripherals/Usart.o ./libpoel/peripherals/Watchdog.o ./libpoel/drivers/DogSpi.o ./libpoel/drivers/PressSensors.o ./libpoel/drivers/TempSensors.o ./control/PcData.o ./control/PcStrings.o -lm -Wl,-Map=dogDisplayCpp-I.map --cref --oformat=elf32-avr -mmcu=atmega32 ./main.o: In function `showIntro()': main.cpp:(.text+0x72): undefined reference to `PoelControl::pcTitle2' main.cpp:(.text+0x74): undefined reference to `PoelControl::pcTitle2' make: *** [dogDisplayCpp-I.elf] Error 1 make: Target `all' not remade because of errors. Build complete for project dogDisplayCpp-I
Michael Z. wrote: > .cpp file: > const char EEMEM pcTitle[] = "Test\0"; > const char EEMEM pcTitle2[] = "Dummy\0"; Die \0 ist überflüssig, die ist bei C (und auch C++) implizit, wenn man ein String-Literal schreibt. > ./main.o: In function `showIntro()': > main.cpp:(.text+0x72): undefined reference to `PoelControl::pcTitle2' > main.cpp:(.text+0x74): undefined reference to `PoelControl::pcTitle2' Die von dir dargestellten Namen lassen auf Bezeichner im global name space schließen, die du definiert hast. Die Referenz geht aber offensichtlich auf einen Bezeichner, der innerhalb der Klasse PoelControl interpretiert wird. Irgendwas hast du da vermasselt, aber das ist mit deinen etwas knappen Zitaten nicht herauszufinden, was es genau ist.
Vergesst was ich geschrieben habe.... Die Defintion + Deklration muss ohne <const> laufen. pcTitle wurde gefunden, da dies noch in einem anderen Header-File herum herumlungerte.... cu, mz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.