Fehler beim kompelieren... wa sist daran falsch?



  • hi
    ich bin gerade dabei ein kleines projekt so zum spaß zu machen und habe ein problem. mein compiler (microsoft visual c++ 6.0) schreibt mir folgende fehler:

    sprite.h(14) : error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'sFilename'
    sprite.h(14) : error C2061: Syntaxfehler : Bezeichner 'sFilename'
    sprite.h(15) : error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'sFilename'
    sprite.h(15) : error C2061: Syntaxfehler : Bezeichner 'sFilename'
    sprite.h(15) : error C2535: 'void __thiscall CSprite::Load(const int)' : Member-Funktion bereits definiert oder deklariert
    sprite.h(14) : Siehe Deklaration von 'Load'

    ein teil der klasse im header file, wo der compiler meckert sieht so aus:

    class CSprite
    {
    	public:
    		CSprite ();
    		~CSprite();
    
    		void Load (const string sFilename);
    		void Load (const string sFilename, int NumFrames, int FrameWidth, int FrameHeight);
    		void SetColorKey (int R, int G, int B);
    
    .
    .
    .
    };
    

    dabei muss ich anmerken dass die klasse aus dem buch "C++ für Spieleprogrammierer" ist. ich weiss allerdings nicht was an der Funktion Load falsch sein soll. hab ich vergessen dem projekt irgendetwas zuzuweisen?
    bitte um hilfe



  • Hallo

    Keine Ahnung ob das hilft, aber schrieb statt

    string
    

    mal

    std::string
    

    und binde cstring mit ein.

    chrische



  • Nicht <cstring> sondern <string>.



  • Hallo

    PuppetMaster2k schrieb:

    Nicht <cstring> sondern <string>.

    Warum? Ich habe mal gelesen, dass man cstring einbinden soll. Was ist der Vorteil von string gegenüber cstring (ich gebe zu, dass ich die Umkehrfrage nicht beantworten könnte)

    chrische



  • Probier mal folgendes oben in die Datei zu schreiben:

    #include <string>
    using namespace std;
    

    Sieht so aus, als würde string nicht als Datentyp erkannt werden. In <cstring> sind die alten C-String-Funktionen, wie z. Bsp. strlen, aber nicht die Klasse string definiert. Achso, nimm lieber einen anderen Compiler. Wenn du auf Visual Studio stehst, hier gibt es die Express Edition kostenlos. Als Alternative würde ich Code::Blocks mit MinGW oder VC7 empfehlen. Der VC7 ist hier kostenlos zu haben.



  • danke sehr jetzt funktioniert das kompilieren



  • noch ein Tipp:
    Das const vor string bringt dir herzlich wenig, sofern du keine Referenz verwendest. Schreib also besser:

    void Load (const string& sFilename, int NumFrames, int FrameWidth, int FrameHeight);
    

    Und lass die ungarische Notation weg, das bringt dir überhaupt nichts.



  • chrische5 schrieb:

    Warum? Ich habe mal gelesen, dass man cstring einbinden soll. Was ist der Vorteil von string gegenüber cstring

    Das ist einfach zu beantworten: Wenn man mit std::string arbeiten will, dann hat <string> den Riesenvorteil, daß es std::string mit reinbringt und <cstring> nicht. <cstring> ist der alte C-Header string.h und enthält die Zeichenkettenmanipulationsfunktionen von C.



  • Hallo

    groovemaster schrieb:

    noch ein Tipp:
    Das const vor string bringt dir herzlich wenig, sofern du keine Referenz verwendest. Schreib also besser:

    void Load (const string& sFilename, int NumFrames, int FrameWidth, int FrameHeight);
    

    Und lass die ungarische Notation weg, das bringt dir überhaupt nichts.

    Der erste Teil klingt seh logisch. Der zweite Teil ist ja wohl wirklich jedem selber überlassen. Ich persönlich finde es ganz praktisch.

    chrische





  • Hallo

    Da überwiegen anscheinend die Nachteile, obwohl ich nicht alles verstehe, was dort als Nachteil bezeichnet wird:

    es ist gegen das objektorientierte Prinzip

    Warum verstosst es gegen das bjektoriebtierte Prinzip, wenn ich Memebrvariablen den Präfix m_ gebe?

    die C++ Standardlibrary macht das auch nicht

    Die MFC machts un die können wohl programmieren.

    Aber diese Diskussion gab es wohl schon tausendmal. Da ich echt noch am Anfang stehe, finde ich es praktische, weil ich dadurch das Gefühl den Quellcode besser zu strukturieren.

    chrische



  • chrische5 schrieb:

    es ist gegen das objektorientierte Prinzip

    Warum verstosst es gegen das bjektoriebtierte Prinzip, wenn ich Memebrvariablen den Präfix m_ gebe?

    das kannst du ruhig machen, ist aber auch nich unbedingt das, was die ungarische notation aussagt 😉


Anmelden zum Antworten