string fehler



  • #ifndef KLASSEN_H
    #define KLASSEN_H

    struct Datum
    {
    int jahr;
    int monat;
    int tag;
    // int schaltjahr;

    bool istGueltig();
    // string zusammenbauen();
    };

    struct Schueler
    {
    string name;

    float durchschnitt(string name, string FACH);
    void anzeigen(string name, string FACH);
    };

    #endif //KLASSEN_H

    Wieso bringt er mir

    h:\zensuren_dev\klassen.h(20) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'name'
    h:\zensuren_dev\klassen.h(20) : error C2501: 'Schueler::string': Fehlende Speicherklasse oder Typspezifizierer
    h:\zensuren_dev\klassen.h(20) : error C2501: 'Schueler::name': Fehlende Speicherklasse oder Typspezifizierer
    h:\zensuren_dev\klassen.h(22) : error C2061: Syntaxfehler: Bezeichner 'string'
    h:\zensuren_dev\klassen.h(23) : error C2061: Syntaxfehler: Bezeichner 'string'

    Das Build-Protokoll wurde unter "file://h:\zensuren_dev\Release\BuildLog.htm" gespeichert.
    zensuren - 5 Fehler, 0 Warnung(en)

    😮 😮 😮 😮

    bitte helfen

    mfg Forknisaf



  • ach ja :
    in der main.cpp:

    #include <string>
    #include "klassen.h"
    ----
    klassen.h ist die datei wo der fehler auftritt



  • Mach noch oben ein

    #include <string>
    

    und ersetze "string" durch "std::string"



  • funktioniert 🙂

    aber jetz habe ich 2 unaufgelöste externe symbole

    zensuren.obj : error LNK2019: Nicht aufgelöstes externes Symbol '"public: float __thiscall Schueler::durchschnitt
    zensuren.obj : error LNK2019: Nicht aufgelöstes externes Symbol '"public: void __thiscall Schueler::anzeigen
    verwiesen in Funktion '_main'

    ??



  • Du solltest diese Funktionen vielleicht noch irgendwo implementieren und nicht nur deklarieren... (bzw. die CPP-Datei dem Projekt hinzufügen)



  • in der main:
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <fstream>
    #include <ctime>
    #include "klassen.h"

    in klassen.cpp:
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <fstream>
    #include <ctime>
    #include "klassen.h"

    in klassen.h:
    #include <string>

    in klassen.cpp stehen die definitionen der funktionen drin

    😕



  • Forknisaf schrieb:

    in klassen.cpp stehen die definitionen der funktionen drin

    Zeig mal. Ich tippe darauf, dass du Schueler:: vergessen hast.



  • ups 🙄

    danke ^^

    mfg forknisaf



  • noch eine frage :

    wie kann ich unix und windows unterscheiden ...

    ich weis ja das das irgendwie mit dem
    #ifdef unix
    geht aber wie genau weis ich auch net mehr 😞

    ich möchte einen cls/clear befehl mit system machen ....

    mfg forknisaf



  • #ifdef _WIN32
    // Windows :-)
    #else
    // Kein Windows :-(
    #endif
    


  • jaa so in etwa hab ichs ja auch aber was kommt dann zwischen

    #ifdef
    und
    #else
    und
    #endif

    🙂 sry bin etwas denkzellengeschwächt

    mfg Forknisaf



  • aktuell hab ichs so:

    #ifdef unix
    system("clear");
    #else
    system("cls");
    #endif

    aber da kommen diese fehler:
    zensuren.cpp(58) : error C2501: 'system': Fehlende Speicherklasse oder Typspezifizierer
    zensuren.cpp(58) : error C2365: 'system': Erneute Definition; vorherige Definition war 'Funktion'
    C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\stdlib.h(314): Siehe Deklaration von 'system'
    zensuren.cpp(58) : error C2440: 'Initialisierung': 'const char [4]' kann nicht in 'int' konvertiert werden
    Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    ....



  • Hast Du auch

    #include <process.h>
    

    in dem Cpp-File?



  • funktioniert net

    öhm vllt hab ichs ja an der falschen stelle derzeit stehts nach den
    #include's und using namespace std;

    😕



  • Ja, das ist definitiv falsch - die system-Befehle müssen dorthin, wo du das clear screen ausführen willst. Du kannst dir aber auch eine Funktion darum bauen:

    void clrscr()
    {
    #ifdef _WIN32
      system("cls");
    #else
      system("clear");
    #endif
    }
    

    -> jetzt kannst du dort, wo der Bildschirm gelöscht werden soll, einfach clrscr(); angeben und je nach Betriebssystem wird der richtige Befehl ausgeführt.



  • danke funktioniert 🙂


Anmelden zum Antworten