String Problem bei Engine

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

  • String Problem bei Engine

    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
  • 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 ()

  • 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? :D
    Denn es scheint ja an MVC zu liegen. :/

    MfG
    Check
  • 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
  • 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 ==========
  • 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
  • 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
  • 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