externe Variablen
-
Moin, ich versuch gerade, variablen in einem Makefile global zur Verfügung zu stellen.
So weit ich das jetzt weiß, soll das mit "extern" in Headerdateien gehen.
Ich hab also:#ifdef VARIABLEN_H #define VARIABLEN_H extern int a; extern int b; #endif
Diese Header-Datei habe ich nun in meinem .c file hinzugefügt und wollte sie mit scanf bearbeiten. Nur meckert mein Compiler dann, dass a und b noch nicht deklariert wurden. Ich benutzte Dev C++.
Gibt es da noch irgendwas, was ich beachten muss?
-
Dann hast du wohl irgendwas dabei falsch gemacht. Deine Beschreibung klingt aber korrekt. Daher: Bitte vollständiges Minimalbeispiel liefern, das den Fehler reproduziert und die genaue Fehlermeldung.
-
#include <stdio.h> #include "C:\...\variablen.h" int main (void) { a=1; }
[Error] 'a' was not declared in this scope
[Error] [Add.o] Error 1Und die Headerdatei halt wie oben schon geschrieben.
Inkludieren sollte eigentlich auch richtig sein, mit einer anderen Headerdatei (da waren ein paar Funktionen deklariert) im gleichen Verzeichnis hat es auf jeden Fall funktioniert.
-
Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.
-
Youka schrieb:
Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.
Nein. Eine fehlende Definition würde sich ganz anders äußern. Hier fehlt die Deklaration.
Es ist aber ganz einfach und hätte man schon im ersten Beitrag sehen können, wenn man scharfe Augen hat:
#ifdef
->
#ifndef
Ich bemerke solche Fehler bei den Includeguards übrigens dadurch, dass ich beim Tippen da drauf achte, dass die ifndef- und die define-Zeile hinterher genau gleich lang sein müssen.
-
Danke schon mal für den Hinweis mit dem #ifndef, hab jetzt auch gesehen, dass ich das bei der funktionierenden Header Datei schon richtig gemacht hatte, bei der für die Variablen das n aber wohl irgendwie verpennt habe
Die alte Fehlermeldung taucht nun zum Glück auch nicht mehr auf, die neue ist dafür noch verwirrender
[Linker error] Add.o:Add.c:(.text+0xd): undefined reference to `a'
-
Youka schrieb:
Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.
Oder anders:
In irgendeinem Code (.c-Datei) deines Projekts muss außerhalb einer Funktion
auch die Variable definiert sein. Es fehlt einint a;
-
Okay, danke, jetzt funktioniert es auch
Auf jeden Fall in dem kleinen Programm, das aufs große zu Übertragen sollte dann machbar sein
Danke an alle für eure tolle Hilfe
-
Slisus schrieb:
Die alte Fehlermeldung taucht nun zum Glück auch nicht mehr auf, die neue ist dafür noch verwirrender
[Linker error] Add.o:Add.c:(.text+0xd): undefined reference to `a'Das ist jetzt das was Youka meinte