Problem bei globaler Variable in C
mr.q.c 22.08.2004 - 17:17 696 9
mr.q.c
Bloody Newbie
|
Hi Leute!
Ich habe ein Problem. Vereinfacht ausgedrückt: Ich möchte folgendes Programm kompilieren (h1 bzw c1 ist das Hauptprogramm und greift auf eine Funktion in h2 bzw c2 zu)
h1.1: #ifndef h1 #define h1
#include "h2.h"
int i;
#endif
=========== c1.cpp: #include "h1.h"
int main() { i = 1; return foo(); }
=========== h2.h: #ifndef h2 #define h2
#include "h1.h"
int foo();
#endif
=========== c2.cpp #include "h2.h"
int foo() { return i; }
... WO LIEGT DA DAS PROBLEM? Den Linker hauts immer auf.
|
mat
AdministratorLegends never die
|
habs mir nicht so genau angeschaut.. allerdings eines kann ich dir sagen: so, und am besten gar nicht, hantiert man nicht mit globalen variablen.
btw. das problem liegt sicher an den include guards.
|
Ringding
Pilot
|
Du musst die Variable extern deklarieren. Diese Frage stellt beinahe jeder C Anfänger, man könnte also sagen, es ist eine FAQ.
|
Geigerzeiger
Addicted
|
ok ich würds so machen: h1.h:
#ifndef h1
#define h1
extern int i; // Verweis auf i in c1.cpp
#endif
===========
c1.cpp:
#include "h1.h" // Variable
#include "h2.h" // Funktion
int i; // Setz ich, da h1.h auf diese verweist
int main()
{
i = 1;
return foo();
}
===========
h2.h:
#ifndef h2
#define h2
extern int foo(); // in c2.cpp vorhanden
#endif
===========
c2.cpp
#include "h1.h" // Dekl. für Variable
#include "h2.h" // Dekl. für Funktion
int foo()
{
return i;
}
^ /edit: Es würde auch eine header reichen wo du die 2 verweise reintust.
Bearbeitet von Geigerzeiger am 22.08.2004, 19:04
|
mr.q.c
Bloody Newbie
|
Danke für die Antworten!
Zu meiner verteidigung und meiner schande muss ich gestehen, dass ich auf kein anfänger in C bin. Nur habe ich seit 4 Jahren keine Zeile C mehr programmiert. Hab mich aber jetzt in ein neues Thema in der Programmierung eingearbeitet und dazu eignet sich C am besten.
|
HaBa
VereinsmitgliedDr. Funkenstein
|
"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt
|
moidaschl
Vollzeit-Hackler
|
"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt ![:D](/images/smilies/biggrin.gif) rofl ![:D](/images/smilies/biggrin.gif) dann müssten wir unsren lehrern schon ein paar verpasst haben, manchmal gehts hald leider ned ohne, bzw is es vieeeeeel angenehmer
|
xdfk
pädagogisch wertvoll
|
|
Geigerzeiger
Addicted
|
im prinzip sollte man src files mit .c versehen wenn die standard ANSI-C library verwendet wird und keine zeile c++ vorhanden ist. Aber imho is ma des zimli wurscht ! ![:D](/images/smilies/biggrin.gif) btw. man sollte alle vars/objekte mit watches versehen und in den entsprechenden zeilen breakpoints setzen.
|
mr.q.c
Bloody Newbie
|
Zu der frage warum cpp-ext und nicht c!
Das einarbeitungsprojekt das ich gerade angefangen habe wird mit C angefangen, brauche dann im weiteren verlauf C++ d.h. OOP und wird daher von anfang an mit einem c++-comp übersetzt. wegen der einheitlichen form ".cpp"
|