C++ der bezeichner string ist nicht definiert.

  • #1

moin

Show

    ich hab da mal ein problem!
    und zwar kann ich von heute auf morgen nciht mehr auf die Klasse CString zugreifen!!!
    woran kann das liegen??
    ich mein ms visual studio schon neu installiert funktioniert aber immer ncoh nciht!! und das ist ganz schön ********!
    hab ich mir da irgendwelche einstellungen zerschossen oder woran kannst liegen?

    mfg
    umbrasaxum

    C++ der bezeichner string ist nicht definiert.

    goela

    Erfahrenes Mitglied

    • #2

    Präsisiere mal Deine Frage!!!!
    Wie und warum kannst Du nicht mehr auf die CString Klasse zugreifen!!! Fehler bei kompilieren, bei der Laufzeit oder was !

    • #3

    das issn compiler-fehler. hier mal die meldung:

    Kompilierung läuft...
    main.cpp
    C:\Windows\Desktop\Proggn\c++\string\main.cpp(5) : error C2065: 'CString' : nichtdeklarierter Bezeichner
    C:\Windows\Desktop\Proggn\c++\string\main.cpp(5) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 's1'
    C:\Windows\Desktop\Proggn\c++\string\main.cpp(5) : error C2065: 's1' : nichtdeklarierter Bezeichner

    mein code:
    #include <string.h>

    int main()
    {
    CString s1;

    return 0;
    }

    • #4

    lässt sich der gleiche code denn auf anderen rechnern compilieren? und welche version von visual c++ benutzt du?
    vielleicht hilft dir das hier weiter.

    • #5

    Versuch das mal so dann muss sich das compilieren lassen

    Code:

    #include <afx.h>  // Wird von MFC-Klassen benötigt
    #include <string.h> 
    
    int main() 
    { 
      CString s1; 
      return 0; 
    }

    Außerdem musst du die MFC dynamisch oder statisch dazu-linken.
    Einstellung für VS++6.0:
    PROJEKT->Einstellungen->Allgemein->Microsoft Foundation Classes:
    <hier umstellen>

    Gruss Homer

    • #6

    ich benutzt die version 6.0

    das problem ist ja das meine quellcodes von einem tag auf den anderen nicht mehr funktioniert haben!
    ich hab auch alle eure tips ausprobiert hat aber alles nicht geklappt!

    • #7

    Also mein Post hat definitiv funktioniert. Ich würde mal sagen, das an deiner Installation von Visual Studio was nicht funktioniert.

    Gruss Homer

    • #8

    jo dein beispiel funktioniert! danke.

    ich weiss nicht ob es an der installation liegt es hat ja von einen tag auf den anderen nicht mehr funktioniert!
    naja egal nu bin ich erst einmal wieder glücklich!

    mfg
    umbrasaxum

    • easy-coding.de »
    • Coding »
    • C, C++ & Objective-C »

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      • 1

      Hiho!
      Ich weiß es wird kommen, daher eines vorweg: Ich komme mit GCC weniger klar als mit MVC, also nutze ich auch fast nur MVC!

      Ich möchte wie im anderen Topic erwähnt eine Engine erstellen. Das gelingt jetzt bei den Strings nicht schön.
      Ich füge in der Klasse Audio als Parameter ein: "const string musictitle". Das Ganze wird in der Funktion verwendet. iostream ist inkludiert und trotz allem wird [string] rot unter-kringelt, der Bezeichner sei nicht gefunden geworden.
      Auch nach Neustart nichts Anderes, habe auch mal Windows.h oder string inkludiert/mit inkludiert. Jedes mal wird [string] um kringelt und das Ganze mit einem char-Array zu machen wäre mir zu umständlich. <_<
      In dem Anderen Topic: SFML Audio Probleme Dingsbums ist der Code.

      Danke!
      MfG
      Check

      • 2

      soweit ich weiß kann man string nicht konstant machen weils eine klasse ist
      da kann dir auch der GCC nicht helfen ;D

      EDIT:

      Ich nehm alles zurück, ich kann mit dem GCC strings const machen, dann aber nimmer ändern, was in deiner anwendung allerdings egal sein sollte

      EDIT 2:
      schick ma sourcode vom header und vom code der funktion/methode (wie auch immer)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von pocky (23. Februar 2011, 21:50)

      • 3

      Die sind hier.

      C++ der bezeichner string ist nicht definiert.

      MfG
      Check

      • 4

      So, habe das Ganze jetzt mal durch den Debugger gehauen und jede einzelne Meldung, auch wenn sie noch so logisch ist durch vorher resultierende Warnungen/Fehlermeldungen, überprüft und auch nochmal in der MSDN nachgeschlagen.
      Die MSDN sagt, ich soll den identifier davor deklarieren. Das passt aber nicht so ganz zu meiner Situation, oder?

      Es ist komisch, ich habe ein neuen Projekt erstellt und dort vereinfacht die gleiche Situation nach gebaut. Da hat alles reibungslos funktioniert.
      Nun habe ich mal versucht, im Engine-Projekt, ein string einfach zu erstellen. Geht nicht. Er erkennt den string nicht als Typenspezifizierer.
      Denkt ihr, ich sollte das ganze Projekt einfach nur nochmal starten? Ggf. mit GCC?

      C++ der bezeichner string ist nicht definiert.

      Denn es scheint ja an MVC zu liegen.
      C++ der bezeichner string ist nicht definiert.

      MfG
      Check

      • 5

      Ich rate mal ohne mich in dein Projekt reinzuknien.

      In der Datei wo dein string bemängelt wird hast du da irgendwo

      Quellcode

      1. #include <string>

      ?

      Microsoft könnte so etwas auch mal ein wenig verstecken.
      Aber, wenn du da mit arbeiten möchtest, solltest du wissen wo du zuerst suchen solltest.

      • 6

      Ich habe "iostream" sowie "string" inkludiert.

      • 7

      der namespace stimmt auch?

      • 8

      Ja, auf "std" gestellt.
      Ansonsten ist alles an den nötigen stellen im lwtAudio-Namespace.

      • 9

      Irgentwie geht aus deiner Fragestellung nicht ganz hervor wie du das ganze machst und was für Fehlermeldungen du bekommst.

      Eine ganze einfache explitzite string constanten Definition und Dekleration sieht so aus:

      HEADER

      Quellcode

      1. extern const std::string MEINSTRING ;

      SOURCE

      Quellcode

      1. #include <iostream>
      2. const std::string MEINSTRING = "Test";

      Was kriegst du den für Compilermeldungen?

      Mfg Rushh0ur

      • 10

      1>------ Erstellen gestartet: Projekt: Audio, Konfiguration: Debug Win32 ------
      1> Audio_Datei.cpp
      1>c:\users\matthis\desktop\audio\audio\audio_header.hpp(15): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
      1>c:\users\matthis\desktop\audio\audio\audio_header.hpp(15): error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'musictitle'
      1>c:\users\matthis\desktop\audio\audio\audio_header.hpp(22): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
      1>c:\users\matthis\desktop\audio\audio\audio_header.hpp(22): error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'soundtitle'
      1>c:\users\matthis\desktop\audio\audio\audio_header.hpp(22): error C2535: 'void lwtAudio::Audio::Init(const int)': Memberfunktion bereits definiert oder deklariert
      1> c:\users\matthis\desktop\audio\audio\audio_header.hpp(15): Siehe Deklaration von 'lwtAudio::Audio::Init'
      1>c:\users\matthis\desktop\audio\audio\audio_datei.cpp(4): error C2061: Syntaxfehler: Bezeichner 'string'
      1>c:\users\matthis\desktop\audio\audio\audio_datei.cpp(5): error C2511: 'void lwtAudio::Audio::Init(sf::Music)': Überladene Memberfunktion nicht in 'lwtAudio::Audio' gefunden
      1> c:\users\matthis\desktop\audio\audio\audio_header.hpp(12): Siehe Deklaration von 'lwtAudio::Audio'
      1>c:\users\matthis\desktop\audio\audio\audio_datei.cpp(44): error C2061: Syntaxfehler: Bezeichner 'string'
      1>c:\users\matthis\desktop\audio\audio\audio_datei.cpp(45): error C2511: 'void lwtAudio::Audio::Init(sf::Sound)': Überladene Memberfunktion nicht in 'lwtAudio::Audio' gefunden
      1> c:\users\matthis\desktop\audio\audio\audio_header.hpp(12): Siehe Deklaration von 'lwtAudio::Audio'
      ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

      • 11

      schick bitte den dazugehörigen code...

      • 12

      Der findet bei dir tatsächlich nicht die Definition von string, sprich igendwie hast du die Headerdateien falsch includiert bzw nicht überall, wahrschienlich in einer Falschen reihenfolge.

      Stell mal sicher das die iostream in beiden Dateien (Header und Source) zur verfügung steht.

      Entweder du gibst diese in beiden Dateien an oder da deine Sourcedatei die dazugehörige Headerdatei einbindet, includierst du den iostream Header in deine Headerdatei, dort auch die Benutzung vom std namespace definieren.

      Da der Fehler in der Headerdatei auftritt, nehme ich mal an du hast die iostream nur in der Quelldatei eingebunden, von daher findet er es in der Headerdatei nicht und die obere Lösung sollte funktionieren.

      Mfg Rushh0ur

      • 13

      Quellcode

      1. Audio.hpp:
      2. #ifndef DLL_AUDIO //Start des "Waechters"
      3. #define DLL_AUDIO //Erstellung
      4. #if _USRDLL // Importieren+Exportieren der DLL
      5. #define DLL_AUDIO_API _declspec(dllexport)
      6. #else
      7. #define DLL_AUDIO_API _declspec(dllexport)
      8. #endif
      9. #endif

      Alles anzeigen


      Quellcode

      1. Audio_Header.hpp:
      2. #include <iostream> //Um einen String zu erzeugen
      3. #include <string> //Um ihn zu verarbeiten
      4. #include "Audio.hpp" //Hauptdatei einbinden
      5. #include <SFML\Audio.hpp> //SFML-Audio
      6. #include <SFML\System.hpp> //SFML-System
      7. #pragma warning(disable: 4251)
      8. //Starten des Namepaces "Audio"
      9. namespace lwtAudio
      10. {
      11. class DLL_AUDIO_API Audio
      12. {
      13. public:
      14. //Musics
      15. void Init (const string musictitle, sf::Music m);
      16. void Play (sf::Music m);
      17. void Stop (sf::Music m);
      18. void Pause (sf::Music m);
      19. void Loop (sf::Music m);
      20. void Volume(sf::Music m, float volume);
      21. //Sounds
      22. void Init (const string soundtitle, sf::Sound s);
      23. void Volume(sf::Sound s, float volume);
      24. void Play (sf::Sound s);
      25. void Stop (sf::Sound s);
      26. void Pause (sf::Sound s);
      27. private:
      28. sf::Music m;
      29. sf::Sound s;
      30. float volume;
      31. };
      32. }

      Alles anzeigen


      Quellcode

      1. Audio_Datei.cpp:
      2. #include "Audio_Header.hpp"
      3. //File initialisieren
      4. DLL_AUDIO_API void lwtAudio::Audio::Init(sf::Music m, string musictitle)
      5. {
      6. //File Laden
      7. if(!m.OpenFromFile(musictitle))
      8. exit (3);
      9. }
      10. //Play
      11. DLL_AUDIO_API void lwtAudio::Audio::Play(sf::Music m)
      12. {
      13. //File abspielen
      14. m.Play();
      15. }
      16. //Stop
      17. DLL_AUDIO_API void lwtAudio::Audio::Stop(sf::Music m)
      18. {
      19. //File stoppen
      20. m.Stop();
      21. }
      22. //Pause
      23. DLL_AUDIO_API void lwtAudio::Audio::Pause(sf::Music m)
      24. {
      25. //File pausieren
      26. m.Pause();
      27. }
      28. //Loop
      29. DLL_AUDIO_API void lwtAudio::Audio::Loop(sf::Music m)
      30. {
      31. //File loopen
      32. if(m.GetLoop()==true)
      33. m.SetLoop(false); //Loop beenden wenn schon geloopt
      34. else
      35. m.SetLoop(true); //Loop starten wenn Loop noch nicht geloopt
      36. }
      37. DLL_AUDIO_API void lwtAudio::Audio::Volume(sf::Music m, float volume)
      38. {
      39. //File auf neue volume stellen
      40. m.SetVolume(volume);
      41. }
      42. //Sounds
      43. DLL_AUDIO_API void lwtAudio::Audio::Init(sf::Sound s, string soundtitle)
      44. {
      45. //File laden
      46. if(!m.OpenFromFile(soundtitle))
      47. exit (3);
      48. }
      49. DLL_AUDIO_API void lwtAudio::Audio::Volume(sf::Sound s, float volume)
      50. {
      51. //File auf neue volume stellen
      52. s.SetVolume(volume);
      53. }
      54. DLL_AUDIO_API void lwtAudio::Audio::Stop(sf::Sound s)
      55. {
      56. //File stoppen
      57. s.Stop();
      58. }
      59. DLL_AUDIO_API void lwtAudio::Audio::Pause(sf::Sound s)
      60. {
      61. //File pausieren
      62. s.Pause();
      63. }
      64. DLL_AUDIO_API void lwtAudio::Audio::Play(sf::Sound s)
      65. {
      66. //File starten
      67. s.Play();
      68. }

      Alles anzeigen

      • 14

      Geht jetzt. Hatte den Befehl [using namespace std] in der CPP-Datei. (Oben ist eine ältere Version meines Codes gezeigt)
      Da hat das dann natürlich nicht mehr im Header geklappt.

      C++ der bezeichner string ist nicht definiert.

      • 15

      Also,
      1. using namespace std im Header nach #pragma warning(disable: 4251) definieren sonst findet er die classe string nicht da diese im Namensraum std liegt.
      2. Du solltest Argumentenreihenfolge und deren Eigenschaften strikt einhalten, sowohl bei der Definition wie auch bei der Deklaration.
      -> void Init (const string musictitle, sf::Music m);
      -> void lwtAudio::Audio::Init(sf::Music m, string musictitle)
      Wie ist da nun die Rheinefolge?

      //Edit: Mach es in die Header, wenn du es in die CPP Datei machst und pech hast dann wird die nächste Datei die dein Header einbindet unter umständen nicht wissen wo string defniert ist. Ach hast du ja

      C++ der bezeichner string ist nicht definiert.

      Mfg Rushh0ur

      • 16

      Wie erwähnt, ein etwas älterer Code. Die DLL ist schon fertig.

      C++ der bezeichner string ist nicht definiert.

      MfG
      Check

    • Teilen

    • easy-coding.de »
    • Coding »
    • C, C++ & Objective-C »