Anfängerfrage Was ist falsch bzw. Hä?



  • Ich hab fürn ein Spiel eine Standardklasse Warrior geschrieben, von der alle anderen Klassen erben sollten. Ich bekomme für die Datei, in der nur Warrior steht 102 Fehler. Die ersten 101 sind : "(5) : error C2011: 'Warrior' : 'class'-Typ-Neudefinition "
    Dann noch "fatal error C1003: Mehr als 100 Fehler gefunden; Kompilierung wird abgebrochen."

    Hier die Klasse
    [code]
    class Warrior
    {
    public:
    unsigned short armor,freq,dmgb,dmga,fast,dmg,HP,see,mut,radius, flying, mana;
    unsigned short HP_max;
    void Warrior::attack(Warrior opponent)
    {
    int all;
    all = dmg - opponent.armor;
    if (opponent.flying == 1)
    {
    all += dmga;
    }
    else
    {
    all += dmgb;
    }
    opponent.HP -= all;
    }
    };

    thx
    Glamdring



  • [war Quatsch]



  • Ich glaube, du solltest erstmal ein gutes Buch über C++ lesen.

    Diese Klasse kann man sich schenken, dafür eignen sich structs genausogut.

    Die Fehler kommen wahrscheinlich daher, das du keine "include guards" hast.
    An den Anfang der .h-Datei müssen zwei Zeilen, ans Ende eine:

    #ifndef WARRIOR_H
    #define WARRIOR_H
    
    class Warrior
    {
      // Deine Klasse
    };
    
    #endif
    


  • cd9000 schrieb:

    Diese Klasse kann man sich schenken, dafür eignen sich structs genausogut.

    Naja eine 'struct' wird doch in C++ sowieso als Klasse mit alles public
    Elementen interpretiert oder? Da ist es doch egal...

    gruß,
    walker



  • class Warrior 
    { 
    public: 
    unsigned short armor,freq,dmgb,dmga,fast,dmg,HP,see,mut,radius, flying, mana; 
    unsigned short HP_max; 
    void attack(Warrior opponent) 
    { 
    int all; 
    all = dmg - opponent.armor; 
    if (opponent.flying == 1) 
    { 
    all += dmga; 
    } 
    else 
    { 
    all += dmgb; 
    } 
    opponent.HP -= all; 
    } 
    };
    

    Müsste klappen. Du bist nämlich innerhalb der Dekla noch mal in den Warrior-Namespace reingegangen



  • Du musst den Gegner bei Attack per Referenz übergeben (Warrior&).
    Daten sollten immer private sein und Basisklassen immer einen virtuellen Destruktor haben.
    Wenn du keinen richtigen Grund hast, short zu verwenden, lass es weg.
    Lies ein Buch.



  • walker schrieb:

    cd9000 schrieb:

    Diese Klasse kann man sich schenken, dafür eignen sich structs genausogut.

    Naja eine 'struct' wird doch in C++ sowieso als Klasse mit alles public
    Elementen interpretiert oder? Da ist es doch egal...

    Das was mir schon beim Schreiben dieses Satzes klar, dass so etwas kommt. 😃

    Ich wollte damit auf den Punkt aufmerksam machen, dass alle Variablen public sind. Das ist C-Stil und bei Klassen ziemlich sinnlos.


Anmelden zum Antworten