2 Dateien brauchen sich



  • Ich hab in einem VC++ project 2 Dateien

    1.Object.cpp
    und 2. Collision.cpp
    (überall noch die header dateien dazu)

    Collision.cpp braucht braucht Strukturen Object.cpp.

    und Object.cpp braucht Funktionen aus Collision.cpp.

    Bin ich doooph? oder funktioniert sowas nicht?

    Wenn ich das project compile, bekomm ich den Fehler "OBJECTLIST' : redefinition; symbol cannot be overloaded with a typedef"

    was kann ich machen? 😕



  • (OBJECTLIST ist eine Struktur aus der Datei Object.cpp)



  • in object.cpp sollten keine Strukturen, die von anderen Files benötigt werden, deklariert sein, die gehören in object.h. Genauso kannst du Funktionen in Headern deklarieren. Mehr kann ich ohne mehr input nicht sagen.



  • sorry da hab ich mich verschrieben
    die Datentyp Strukturen sind natürlich in den Headerdateien

    Ich poste sie hier mal:

    ///////////////////////////////////////////////////
    //Object.h
    ///////////////////////////////////////////////////
    
    #ifndef _OBJECT_
    #define _OBJECT_
    
    ///////////////////////////////////////////////////
    //INCLUDES
    ///////////////////////////////////////////////////
    #include "airam_Sprite.h"
    #include "airam_ddraw.h"
    #include "collision.h"
    ///////////////////////////////////////////////////
    //PROTOTYP
    ///////////////////////////////////////////////////
    
    ///////////////////////////////////////////////////
    //DIFINES
    ///////////////////////////////////////////////////
    //gekürzt: weil unwichtig
    
    ///////////////////////////////////////////////////
    // STRUKTUREN
    ///////////////////////////////////////////////////
    typedef struct SKILL_TYP{
    	short Speed;
    	short Attack;
    	short Resistence;
    	short ZDUMMI;
    }SKILL, *SKILL_P;
    
    typedef struct OBJECT_TYP{
    	short x, y;				//Weltkoordinaten des objectes
    	char typ;				//PLAYER ENEMY ODER NPC maybe kommt noch was dazu
    	char Richtung;			//die Richtung in die das object gerne gehen möchte
    	char condition;			//Zustand: HIT, ATTACK, GOING, STANDING.. etc
    	BOOL Change;			//wird für die Animierfuktion benötigt, wenn das Objectrichtung wechselte muss der Bilder-Wechsel-Timer erstma geNULLt werden
    	char zdummi;			//dummi Variable
    	SKILL skill;			//Skill Strutur die die Fähigkeiten des Objectes beschreibt
    	short HP;				//Healh Points: wie der Name schon sagt
    	AIR_SPRITE8_P pSprite;	//Pointer auf Sprite Struktur, das zum Object gehört (die bilder, Größe usw)
    }OBJECT;
    
    typedef struct OBJECTLIST_TYP {// einfach verkettete Liste
    	OBJECT *Object;
    	struct OBJECTLIST_TYP *next;
    }OBJECTLIST;
    
    ///////////////////////////////////////////////////
    //PROTOTYP
    ///////////////////////////////////////////////////
    BOOL InitSprite(const char *, AIR_SPRITE8_P, char, char, char, char, char);
    BOOL InitSprites(void);
    BOOL CreatePlayer(OBJECT *, const char *, char, char, char, char, char, short, short);
    BOOL CreateTrottel(OBJECT *, short, short);
    BOOL atiMove_Objects(OBJECTLIST **);
    BOOL atiAnimate_Objects(OBJECTLIST **);
    BOOL atiPaint_Objects(OBJECTLIST **);
    
    #endif
    

    und collision.h

    ///////////////////////////////////////////////////
    //collison.h
    ///////////////////////////////////////////////////
    #ifndef _BUMM_
    #define _BUMM_
    
    #include "Object.h"
    #include "atina_map.h"
    
    ///////////////////////////////////////////////////
    //PROTOTYP
    ///////////////////////////////////////////////////
    BOOL atiMapCheckBumm(OBJECTLIST **olist);
    #endif
    

    (was ich für unwichtig gehalten hab, is gekürzt worden)



  • Wenn Du im Prototyp nur mit Pointern arbeitest, muss der Compiler nicht den genauen Aufbau der Struktur kennen. Du kannst die Struktur dann einfach mit "struct OBJECTLIST;" vordeklarieren und musst den anderen Header nicht #includen. Wie gesagt: mit Zeigern geht es (mit Referenzen wahrscheinlich auch, oder?).



  • danke für die Antwort, ich probiers jetzt aus 🙂


Anmelden zum Antworten