mehrfach includes



  • hallo,
    ich bekomme einfach diesen blöden fehler nicht raus.
    also..

    ich habe 2 header files
    -armee.h
    -land.h

    2 cpp files
    -armee.cpp
    -land.cpp

    armee.cpp included land.h und armee.h
    und land.cpp armee.h und land.h

    und das geht nicht da bekomme ich immer inen compiler fehler...
    wie kann ich das umgehen ??

    besten dank und ich hoffe ich habe mich verständlich ausgedrückt wenn nicht, dann sagt bescheid und ich probiers noch mal 😉



  • include-guard...



  • du meinst

    #ifndef armee_
    #define armee_

    #endid armee_

    das hilft leider nicht



  • du gibst einfach zu viele infos ....

    und das geht nicht da bekomme ich immer inen compiler fehler...
    wie kann ich das umgehen ??

    aha!
    mein auto ist kaputt, wo ist der fehler? wo würdest du anfangen zu suchen?



  • hast ja recht.

    also die Armee.h

    #ifndef armee_
    #define armee_
    
    #include <windows.h>
    #include <stdio.h>
    #include "Land.h"
    
    #include "CSampleSceneNode.h"
    using namespace irr;
    

    armee.cpp

    #include "Armee.h"
    

    die Land.h

    #ifndef land_
    #define land_
    #include <irrlicht.h>
    #include "Armee.h"
    
    using namespace irr;
    

    die Land.cpp

    #include "Land.h"
    

    compiler output

    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2535: 'Armee::Armee(char )': Memberfunktion bereits definiert oder deklariert
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2535: 'Armee::Armee(char )': Memberfunktion bereits definiert oder deklariert
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2535: 'Armee::Armee(char )': Memberfunktion bereits definiert oder deklariert
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(23): error C2535: 'Armee::Armee(char )': Memberfunktion bereits definiert oder deklariert
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(26): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(26): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(26): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(26): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(26): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(27): warning C4183: 'Blink': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(27): warning C4183: 'Blink': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(27): warning C4183: 'Blink': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(27): warning C4183: 'Blink': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(27): warning C4183: 'Blink': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(28): warning C4183: 'setPosition': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(30): warning C4183: 'setScale': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(30): warning C4183: 'setScale': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(30): warning C4183: 'setScale': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(30): warning C4183: 'setScale': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(30): warning C4183: 'setScale': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(32): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(32): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(32): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(32): error C2061: Syntaxfehler: Bezeichner 'Land'
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2143: Syntaxfehler: Es fehlt ';' vor '
    '
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2143: Syntaxfehler: Es fehlt ';' vor '
    '
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2143: Syntaxfehler: Es fehlt ';' vor '
    '
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2143: Syntaxfehler: Es fehlt ';' vor '
    '
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::currentLand': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::currentLand': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::currentLand': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::currentLand': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::Land': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::Land': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::Land': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Armee.h(39): error C2501: 'Armee::Land': Fehlende Speicherklasse oder Typspezifizierer
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(11): warning C4244: 'Argument': Konvertierung von 'int' in 'irr::f32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(11): warning C4244: 'Argument': Konvertierung von 'int' in 'irr::f32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(18): warning C4244: 'Argument': Konvertierung von 'double' in 'irr::f32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(18): warning C4244: 'Argument': Konvertierung von 'double' in 'irr::f32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(20): warning C4244: 'Argument': Konvertierung von 'irr::f32' in 'irr::s32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(20): warning C4244: 'Argument': Konvertierung von 'irr::f32' in 'irr::s32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(50): warning C4244: 'Argument': Konvertierung von 'double' in 'irr::s32', möglicher Datenverlust
    c:\studium4\engines\irrlicht-0.6\irrlicht-0.6\examples\view\Land.cpp(50): warning C4244: 'Argument': Konvertierung von 'double' in 'irr::s32', möglicher Datenverlust

    alle #endif habe ich weg gelassen (hier)

    sorry das mein post so unverständlich war.

    besten dank an alle

    p.s. wenn ich bei land.h
    das
    #include armee.h
    auskommentiere gehts perfekt aber leider brauche ich die .h



  • wahrscheinlich sind "forward declarations" die lösung deines problems.
    habe aber immer noch nicht genug info um dir genau sagen zu können wie du dein problem lösen könntest.
    K.



  • Mal ne Frage am Rande: Warum benutzt du für deine Klassen überhaupt einen Namensraum, wenn du diesen in den Headers auflöst?



  • die Land.h

    Code:

    #ifndef land_
    #define land_

    case_sensitive. Land == land
    die syntaxfehler musst du logischerweise selber auflösen.



  • die Land.h

    Code:

    #ifndef land_
    #define land_
    case_sensitive. Land == land
    die syntaxfehler musst du logischerweise selber auflösen.

    also syntaxfehler sehe ich da keinen .

    #define land_
    

    definiert nur irgendein symbol um den präprezessor davon abzuhalten die datei Land.h mehrfach einzubinden.
    persönlich verwende ich normalerweise

    #ifndef LAND_H 
    #define LAND_H
    ..
    #endif // LAND_H
    

    das ist aber reine geschmacksache
    K.



  • Hatte dieses Problem auch und es ist mit der Deklaration der Klasen in einem Headerfile zu lösen. Die in der reihenfolge zweite Klasse muss vorab forward deklariert werden.
    Beispiel

    class b; //forward deklaration
    
    class a{
    ...
    };
    
    class b{
    ...
    };
    

    Bei mir hat sich das Problem aber durch eine besseres objektorientiertes Design letztendlich von alleine gelöst, so dass ich die 'gegenseitige Inkludierung' gar nicht mehr brauchte.
    mfg
    arni


Anmelden zum Antworten