"class" type redefinition [HILFE]



  • Hi Community 🙂
    Ich habe leider ein Problem wo ich absolut keine Ahnung hab warum?!? und kann auch keine Fehler entdeckn trotzdem sind sie da 😞

    Hier ist die Compiler-Ausgabe :

    1>------ Erstellen gestartet: Projekt: shape_klasse, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>shape_klasse.cpp
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\cshape.h(9) : error C2011: 'CShape' : 'class' type redefinition
    1>        e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\cshape.h(9) : see declaration of 'CShape'
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\ccircle.h(10) : error C2504: 'CShape' : base class undefined
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\crectangle.h(10) : error C2504: 'CShape' : base class undefined
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\shape_klasse.cpp(24) : error C2440: '=' : cannot convert from 'CCircle *' to 'CShape *'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\shape_klasse.cpp(26) : error C2440: '=' : cannot convert from 'CRectangle *' to 'CShape *'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\shape_klasse.cpp(28) : error C2440: '=' : cannot convert from 'CSquare *' to 'CShape *'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\shape_klasse.cpp(38) : error C2027: use of undefined type 'CShape'
    1>        e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\cshape.h(9) : see declaration of 'CShape'
    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\shape_klasse.cpp(38) : error C2227: left of '->Draw' must point to class/struct/union/generic type
    1>Generating Code...
    1>Compiling...
    1>CShape.cpp
    1>Generating Code...
    1>Compiling...
    1>CCircle.cpp
    1>CRectangle.cpp
    1>CSquare.cpp
    1>Generating Code...
    1>Das Buildprotokoll wurde unter "file://e:\VC C-C++ Projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\Debug\BuildLog.htm" gespeichert.
    1>shape_klasse - 8 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    und hier ist die Hauptklasse von der alle andern Klassen erben

    // -------------------------------------------------------------
    // INCLUDES
    // -------------------------------------------------------------
    
    #include "stdafx.h"
    
    // -------------------------------------------------------------
    
    class CShape {
    public:
    	CShape() { }
    	~CShape() { }
    
    	virtual long GetArea() { return(-1); }	// Fehler
    	virtual long GetPerim() { return(-1); }
    	virtual void Draw() { }
    
    // private:
    };
    

    Leider versteh ich schon folgende Compiler-Ausgabe nicht :

    1>e:\vc c-c++ projects\jetzt_lerne_ich_cpp\teil_5\kapitel_18\shape_klasse\shape_klasse\cshape.h(9) : error C2011: 'CShape' : 'class' type redefinition

    Kann mir vllt jem. bitte helfen?

    danke
    lg c4f



  • Headerguards?

    #ifndef SHAPE_H
    #define SHAPE_H
    // -------------------------------------------------------------
    // INCLUDES
    // -------------------------------------------------------------
    
    #include "stdafx.h"
    
    // -------------------------------------------------------------
    
    class CShape {
    public:
        CShape() { }
        ~CShape() { }
    
        virtual long GetArea() { return(-1); }    // Fehler
        virtual long GetPerim() { return(-1); }
        virtual void Draw() { }
    
    // private:
    };
    #endif //SHAPE_H
    


  • drakon vermutet (und wird wohl damit Recht haben), dass dein Header mehrmals eingebunden wird. Beim zweiten Mal findet dann natrürlich die angemeckerte Redefinition der Klasse statt. Das kannst du mit den Include-Guards aus drakons Beispiel oder alternativ mit einem "#pragma once" am Anfang des Headers verhindern. Die Guards sind aber eigentlich besser, da du so noch für andere Zwecke abfragen kannst, ob SHAPE_H bereits definiert wurde (#ifdef, #ifndef, #if defined()).



  • Hey 🙂
    Tut mir leid wegen der späten Antwort war leider nicht zuhaus 😞

    Ich hab's versucht und funktionierte auch...danke 🙂
    schönen Tag noch 🙂

    lg c4f


Anmelden zum Antworten