[C++] Compiler-Meldung

G

Green Mamba

Gast
[C++] Üble Compiler-Meldung ;)

Hi,

ich bin noch nicht soo lange mit C++ unterwegs. Ich schreibe gerade ein kleines Programm, und bekomme diese Fehlermeldung vom Compiler:

Code:
g++ -I/usr/local/include/Inventor/annex -D_REENTRANT -I/usr/X11R6/include \
   -I/usr/lib/qt3//include -g -O2 -c FlowField3D.cpp -o FlowField3D.o
g++ -I/usr/local/include/Inventor/annex -D_REENTRANT -I/usr/X11R6/include \
   -I/usr/lib/qt3//include -g -O2 -c CoordinateSystem.cpp -o \
   CoordinateSystem.o
g++ -I/usr/local/include/Inventor/annex -D_REENTRANT -I/usr/X11R6/include \
   -I/usr/lib/qt3//include -g -O2 -c MappingEuler.cpp -o MappingEuler.o
g++ -I/usr/local/include/Inventor/annex -D_REENTRANT -I/usr/X11R6/include \
   -I/usr/lib/qt3//include -g -O2 -c partikel.cpp -o partikel.o

-----------> ab hier wirds interessant! 
In file included from partikel.cpp:13:
FlowField3D.h:3: error: redefinition of `class FlowField3D'
FlowField3D.h:3: error: previous definition of `class FlowField3D'
partikel.cpp: In function `int main(int, char**)':
partikel.cpp:100: error: no matching function for call to `MappingEuler::
   MappingEuler(SbVec3f (*)[((anz_seed - 1) + 1)], int&, FlowField3D**, int)'
MappingEuler.h:5: error: candidates are: MappingEuler::MappingEuler(const
   MappingEuler&)
MappingEuler.h:8: error:                 MappingEuler::MappingEuler(SbVec3f*,
   int, FlowField3D*, int)


Was genau ist mit der Meldung gemeint? Es geht mir nicht um den falschen Constructor-Aufruf Mapping-Euler, sondern um die seltsame
"FlowField3D.h:3: error: redefinition of `class FlowField3D'" -Meldung
Ich habe die betroffenen Sources mal mit angehangen...

Schönen Gruß
G.Mamba

ps: bitte beim anhang das .txt vor dem entpacken entfernen. musste .txt anhängen, weil ich es sonst nicht anhängen konnte. ;)
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Der Error besagt eine Redefinition, also Neudefinition.
Heisst soviel wie:
1. die Klasse FlowField3D wurde woanders schonmal definiert in einer .h-datei,
oder
2. du hast multiple includes drin.
Ich hab mir deinen Code nicht angesehen, aber schau mal, ob diese FlowField3D.h
öfter in deinen Headers vorkommt. Einmal sollte dann reichen.
 
aah, ich wusste nicht, dass ich ein header-file programmweit nur einmal includieren darf. ich dachte ich muss es in jeder datei includieren in der ich FlowField3D benutze!?
vielen dank!

/edit
diese ifdef, und endif-anweisungen kann man doch bestimmt auch irgendwie zur vereinfachung der includes einsetzen, oder? wie mach ich das genau?
 
Zuletzt bearbeitet:
Ich kenne das so:

-------------------------------------Headerfileanfang
#ifndef DIESES_HEADER_FILE
#define DIESES_HEADER_FILE

include ****
include ****

sonstiges in der HeaderDatei
.....
.....
....

#endif
-------------------------------------Headerfileende

Damit ist sichergestellt, dass der Inhalt jedes Headerfiles nur einmal eingebunden wird. Nämlich dann, wenn
"DIESES_HEADER_FILE" noch nicht definiert ist. Beim ersten Durchlauf wird es dann definiert und blockt so dann einen 2. Durchlauf ab.

War es das, was du wissen wolltest ?

PS: Die benötigten Headerfiles bindest du natürlich überall dort ein, wo sie evtl. benötigt werden. Den Rest übernimmt dann "#ifndef"
 
Das ist natürlich richtig.
Das hatte ich einfach vorrausgesetzt...
 
Zurück
Oben