Problem bei globaler Variable in C
mr.q.c 22.08.2004 - 17:17 682 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
LegendDr. 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 rofl 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 ! 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"
|