Typedef in Modul

Hi,

ich habe diese Fehlermeldung bekommen :
5 ...Schwat\Bauvorhaben_menue.hpp `ADF' was not declared in this scope

Hintergrund:
ADF ist eine Typedef in der main.cpp
wie kann ich die Strucktur so definieren ,dass sie bei der Deklaration einer Funktion in der Bauvorhaben_menue.hpp funktioniert... global bei Typedef ?

Erscheind mir etwas kompliziert zu erklären ... fragt bitte , falls was unklar ist


MfG
Sigmund Freud
 
Wenn ADF in der main.cpp definiert ist. Kannst du ADF entweder in Bauvorhaben_menue.hpp einfügen ( am Anfang) oder main.cpp includen ( würde ich nicht machen )
 
also so klappt das nicht :


Code:
main.cpp
...
using namespace std;
 

typedef struct perso
{
   string Name;
   string Ort;
   string Art;		 
}ADF;


void Bauvorhaben_menue(void);
...
int main(void)
{
	...
mhhh
 
Der Fehler ist:
Code:
5 ...Schwat\Bauvorhaben_menue.hpp `ADF' was not declared in this scope

er tritt in Bauvorhaben_menue.hpp , weil ADF dort nicht deklariert ist.
Das heißt den typedef ganz einfach am Anfang dieser Datei (Bauvorhaben_menue.hpp ) einfügen.
 
Fehler...

13 ... Schwat\main.cpp redefinition of `struct perso'

mhhh das ist irgendwie komisch...
wann ich den in einem modul keine Definition aus einer anderen Datei verwerden , wenn diese Global deklariert ist ?Oder liegt das daran, das ich hier eine Funktion deklariere ?
 
Sigmund Freud hat gesagt.:
Fehler...

13 ... Schwat\main.cpp redefinition of `struct perso'

mhhh das ist irgendwie komisch...
Die Lösung ist ganz einfach:
Du hast die Struktur perso ( ADF ) in die andere Datei kopiert. Weil diese in main.cpp Inkludiert wird, ist sie 2 mal Forhanden. Also einfach
Code:
typedef struct perso
{
   string Name;
   string Ort;
   string Art;		 
}ADF;

aus der main.cpp entfernen
 
nein aber mein problem ist wie folgt...

ich habe in der main die Strucktur global deklariert.Wenn ich jetzt in einem anderem Modul vor der Funktion in der deklaration einer anderen Funktion auf die Strucktur zugreifen will , sag er mir diesen Scorp - fehler und wenn ich das davor noch einmal deklariere, dann gibt es die redefinition ... ich muss also einmal diese Struktur global für alle module deklarieren , weiß aber nicht ob und wie das bei einer Strucktur geht!

MfG
Sigmund
 
Damit auf eine Struktur zugegriffen werden kann muss an dieser Stelle des Codes schon definiert sein. Deswegen stellt man solche Dinge wie Definitionen von Strukturen an den Anfang einer Datei. Wenn eine Struktur (oder ähnliches) von mehreren .h Dateien benötigt wird, stellt man dieses Element in eine eingene .h Datei, welche in die anderen inkludiert wird. Wichtig ist es auch #ifndef #define und #endif zu verwenden.

An den Anfang der .h Datei wird geschrieben

#ifndef XYZ
#define XYZ

#endif

(XYZ wird gewöhnlich durch den Namen der Datei erstetzt
BSP: main.h -> #ifndef main_h ...)

oder bei Visual c++ #pragma once anstelle von #ifndef ...

In deinem Fall wird die Struktur nur in der Bauvorhaben_menue.hpp und main benötigt, deswegen deklariere sie ( Struktur) ganz am Anfang von Bauvorhaben_menue.hpp. Da diese Datei in der main.cpp inkludiert wird, ist es nicht mehr nötig diese Struktur in der main.cpp zu definieren.

Am besten du postest mal Bauvorhaben_menue.hpp (so wie main.cpp weiter oben)
 
Ich hab das jetzt mal mit der header ausprobiert ...

Code:
using namespace std;
typedef struct perso
{
   string Name;
   string Ort;
   string Art;		 
}ADF;

und wenn ich diese einmal include dann das , aber wenn ich die dann noch in einem anderen Modul include , dann redet der wieder von redefinition ... muss ich die dann wieder enddefinen
müsste aber doch auch eigendlich so gehen oder?
 
Deswegen das mit #ifndef ...

Code:
#ifndef _ADF_
#define _ADF_

using namespace std;
typedef struct perso
{
   string Name;
   string Ort;
   string Art;		 
}ADF;

#endif

so müsste es Funktionieren ( wenn die Definitionen in den anderen Dateien entfernt sind)
 
Zurück