AnsiString = AnsiString funktioniert nicht!?





  • Ich glaube ich steh gerade auf der Leitung

    In meinem Buch steht:

    The extern specifier tells the compiler that the following
    variable types and names have been declared elsewhere. In other words, extern lets the compiler know what the types and names are for these global variables without
    actually creating storage for them again. When the two modules are linked, all
    references to the external variables are resolved.
    

    Braunstein schrieb:

    Du machst es ja auch genau verkehrt rum. Das

    extern const AnsiString triangle;
    

    gehört in den Header und die Definition in eine cpp.

    Ich habe nun auch versucht die extern-Deklarationen in die Unit2.h zu packen mit demselben Ergebnis. Die Definition meiner AnsiStrings findet in der const.h statt, sollte ich das nun in eine cpp umwandeln? -Wie gesagt, ich steh gerade auf der Leitung



  • Nein. extern sagt dem Compiler, dass eine Variable dieses Namens existiert und irgendwo auch definiert wird. Damit die Variable in deinem Programm bekannt gemacht werden kann, packst diese extern Deklaration in einen Header.
    Die dazu gehörige Definition packst du in irgendeine cpp damit der Linker sie auch findet.



  • Hallo

    Also nochmal...

    const.h:

    #ifndef CONST_H
    #ifndef CONST_H
    
    #include <vcl.h> // Muß mit rein
    
    extern const AnsiString triangle;
    
    #endif
    

    const.cpp:

    #include "const.h"
    
    const AnsiString triangle = "images\\triangle.bmp";
    

    Unit2.h

    #include "const.h"
    // ... hier triangle benutzen
    

    bis bald
    akari

    /Edit : Code korrigiert



  • Diese sch*** Leitungen immer 🙂
    Danke für eure Erklärungen, habe sie genauestens befolgt, bekomme nun aber dutzende Compiler-Fehler, an welchen ich schon seit einer halben Stunde ratlos davor sitze:
    z.B.

    [C++ Fehler] const.h(5): E2141 Fehler in der Deklarationssyntax
    Das zeigt er bei dieser Zeile an:
    extern const AnsiString white; //bzw auch bei triangle usw.
    
    Oder dieser hier:
    [C++ Fehler] const.h(11): E2238 Bezeichner 'AnsiString' mehrfach deklariert
    in diser Zeile hier extern AnsiString Symbol;    //Symbol user 1
    

    Ich versteh einfach nicht was an dieser Deklaration falsch sein soll, definiert wird white in const.cpp wie oben schon von akari beschrieben:

    const AnsiString white = "images\\white.bmp";
    

    Aber ich glaube ohne Quelltext wird es für euch schwer sein einen Fehler zu finden 😞 , ansonsten hab ich jedoch nichts geändert!



  • Hallo

    Wie mans auch macht...
    Es fehlt noch der include für die VCL, damit der Compiler den Typ AnsiString kennt. Hab meinen Code korriert.

    bis bald
    akari



  • Mein Gott!!!!! Hatte mal nen Compiler dem das alles egal war, der kannte aber natürlich keinen AnsiString. Sollte aber keine Ausrede sein!!!!!!

    Damit ist mein (erstes BCB) Spiel jetzt vorläufig fertig und für die sehr gute Mithilfe an diesem Projekt möchte ich es dieser Community geben.
    Besonderen Dank an akari und Braunstein *Danke*

    Hier wäre das vollständige Spiel, BCB6 [666KB]
    http://rapidshare.com/files/88087685/ticitaci6.rar
    Einfach auf Free-> Warten (ja leider) und fertig

    Einen mir bisher bekannten Fehler gibt es noch, ob ich diesen überhaupt umgehen will, weiß ich noch nicht, bedeutet nämlich ziemlich viel Aufwand
    Wenn man den Bot auf schwer einstellt ist er nicht immer auf schwer eingestellt (klingt lustig) Behebung (zurzeit noch) einfach 2 mal auf Extras->Bot->Schwer klicken und dann Singleplayer starten

    Dafür hat noch niemand den schwierigen Bot bis jetzt besiegt!

    DANKE!!!!!!!!!!


Anmelden zum Antworten