C++ der bezeichner string ist nicht definiert.

  • #1

moin

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

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.

    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?


    Denn es scheint ja an MVC zu liegen.

    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.

    • 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

    Mfg Rushh0ur

    • 16

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

    MfG
    Check

  • Teilen

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

Toplist

Neuester Beitrag

Stichworte