Visual C++ 2010 Express erkennt kein STRING & SWITCH



  • Hallo zusammen,

    Befor ich den vc++ habe, hatte ich dev-c++.
    Der wurde mir aber dann abgeraten.
    Ich habe nun meine Quellcodes in den Vc+ kopiert, aber der Zeigt mir massenhaft fehler an, z.B. (

    error C2664, C3861
    

    ich habe auch schon das

    cout --> zu --> printf
    umgeändert
    

    , aber es funktioniert trotz dem nicht. (hat nichts mit 'string' zu tun)

    Das problem mit dem 'string' ist wie folgt ich habe werte difiniert, z.B. (int, float,(die sind blau)) , aber 'string' ist schwarz geschrieben.

    Ich habe

    #include "stdafx.h"
    #include "targetver.h"
    //Selbst hnzugefüghte
    #include <string.h>
    

    diese Biblioteken oder Headerdatein.

    In stadafx.h steht:

    #pragma once
    
    #include "targetver.h"
    
    // TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
    #include <stdio.h>
    #include <tchar.h>
    #include <fstream>
    //#include <cstdlib.h>
    #include <iostream>
    #include <string>
    

    In tragetver.h steht:

    #pragma once
    
    // Durch Einbeziehen von"SDKDDKVer.h" wird die höchste verfügbare Windows-Plattform definiert.
    
    // Wenn Sie die Anwendung für eine frühere Windows-Plattform erstellen möchten, schließen Sie "WinSDKVer.h" ein, und
    // legen Sie das _WIN32_WINNT-Makro auf die zu unterstützende Plattform fest, bevor Sie "SDKDDKVer.h" einschließen.
    
    #include <SDKDDKVer.h>
    

    Bei Switch zeigt der mir den fehler ERROR C2050: Switch-Ausdruck ist keine Ganzzahl!(versteh ich nicht)

    Ich weiß nicht mehr was ich machen soll, das ist mein Problem!.

    Ich hoff jemand versteht was ich meine und ich hoffe jemand kann mir weiter helfen. Schon mal im Voraus "Danke".



  • Kira schrieb:

    Das problem mit dem 'string' ist wie folgt ich habe werte difiniert, z.B. (int, float,(die sind blau)) , aber 'string' ist schwarz geschrieben.

    string ist eigentlich std::string, eine Klasse (bzw. ein typedef auf eine Klasse) aus dem Namespace std. Sie muss nicht blau sein. Es ist kein integrierter Datantyp.

    Kira schrieb:

    Bei Switch zeigt der mir den fehler ERROR C2050: Switch-Ausdruck ist keine Ganzzahl!(versteh ich nicht)

    Was gibts daran nicht zu verstehen? Switch lässt halt keine Strings als cases zu. Falls Du das brauchst empfehle ich dir if oder gleich std::map<...>

    Simon

    Edit

    Kira schrieb:

    error C2664, C3861

    http://msdn.microsoft.com/en-us/library/s5b150wd(v=VS.100).aspx
    http://msdn.microsoft.com/en-us/library/b6y87cyx(v=VS.100).aspx



  • Kira schrieb:

    ...

    Neben den von theta genannten:

    string.h, stdio.h, cstdlib.h... sind keine C++ Header. Richtig bei Headern aus der C++ Standardbibliothek ist die Schreibweise ohne .h, Vor den C-Kompatibilitätsheadern (wie stdio, stdlib) gehört ein c, und auch das .h weg. Grundsätzlich liegen zudem alle Elemente der Standardbibliothek im Namensraum std.

    Des weiteren denke bitte daran das diejenigen, das C++ Case-Sensitiv ist (Groß-/Kleinschreibung) und du auch in deinen Fehlerbeschreibungen die Typen so angeben solltest, wie sie in C++ geschrieben wird (also switch nicht SWITCH oder Switch), damit man Verwechslungen zwischen Bibliotheken vermeiden kann (z.B. verwende ich unter dem C++ Builder String, was aber nichts mit std::string zu tun hat).



  • ... aber er erkennt das

    switch (getch())
               {
    
    //text
    }
    

    nicht

    das mit der groß und klein schreibung weiß ich, ich wollte das nur zu Veranschaung machen.

    Gruß
    Kira



  • Kira schrieb:

    ... aber er erkennt das...nicht

    Meine Glaskugel ist leider seit 33 Jahren in der Reparatur.

    Formuliere bitte deine Posts so, das wir nicht raten müssen, was deine Probleme sind. Was heißt "er erkennt das nicht"? Gibt es eine Fehlermeldung? Und wenn ja, welche?



  • 1>*.cpp(354): error C3861: "getch": Bezeichner wurde nicht gefunden.
    1>*.cpp(354): error C2050: Switch-Ausdruck ist keine Ganzzahl
    
    do
          {
               switch (getch())
               {
    //Text
    }
    //"9999999" damit er es immer wieder holt
    }while (99999999);
    

    so sry, war in stress ist es so besser.



  • _getch(..)?



  • Kira schrieb:

    Befor
    trotz dem
    difiniert
    hnzugefüghte
    Biblioteken

    absolutely 👍



  • habe ich nichts.
    getch ist unterstrichen

    ich habe es so:

    switch (getch())
               {
                      case '1':
                           {
                            break;
                             //Text        
                            }
                        case '2'...
    }
    


  • troll?

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39320.html

    an die includes hast du gedacht?



  • Erstell bitte mal ein neues Projekt.

    Im Menü unter Datei -> Neu -> Projekt

    Wähle Win32-Konsolenanwendung aus und gib einen Projektnamen ein. Click dann auf OK.

    Im Dialog clickst du nun auf Weiter und suchst nach "Leeres Projekt" und machst dort einen Häckchen rein. Anschließend clickst du auf Fertig stellen.

    Das Projekt wird nun erstellt. Es ist natürlich leer, also füge eine Source-Datei hinzu. Dazu gehst du im Menü auf Projekt -> Neues Element hinzufügen. Dort wählst du C++-Datei (.cpp) aus und nennst diese Main.cpp

    Nun kannst du losprogrammieren. Am besten probierst du mal folgenden Code aus:

    #include <iostream>
    
    int main()
    {
    	while (true)
    	{
    		int zahl;
    
    		std::cout << "Bitte geben Sie eine Zahl ein. Zum Beenden des Programms die Zahl 0 eingeben." << std::endl;
    
    		std::cin >> zahl;
    
    		std::cout << "Sie haben " << zahl << " eingegeben.\n" << std::endl;
    
    		if (zahl == 0)
    		{
    			break;;
    		}
    	}
    
    	std::cout << "Ende." << std::endl;
    
    	return 0;
    }
    

    Starten kannst du das Programm mit Strg + F5



  • Ja danke

    Strg + F5

    klappt auch nur mit f5.

    Dies mit dem std:: ist das für einen selbst oder ist das für das programm, ist das besser wenn man das macht?

    Außerdem komme ich jetzt auch beser mit dem Vc++ besesr klarr.
    Und ich habe alle meinen Fehler Korrigiert, also zumindestens started er die Dos anwenndung.

    Auch danke noch mal an die anderen. 🙂



  • Kira schrieb:

    Ja danke

    Strg + F5

    klappt auch nur mit f5.

    Dies mit dem std:: ist das für einen selbst oder ist das für das programm, ist das besser wenn man das macht?

    Außerdem komme ich jetzt auch beser mit dem Vc++ besesr klarr.
    Und ich habe alle meinen Fehler Korrigiert, also zumindestens started er die Dos anwenndung.

    Auch danke noch mal an die anderen. 🙂

    Das Objekt cout und cin (und vieles weitere) befindet sich im namespace std. Wenn du also nicht

    using namespace std;
    

    hinschreibst, musst du diese Objekte mit dem Qualifizierer std ansprechen, sonst klappt das nicht.



  • Kira schrieb:

    Ja danke

    Strg + F5

    klappt auch nur mit f5.

    Dies mit dem std:: ist das für einen selbst oder ist das für das programm, ist das besser wenn man das macht?

    Außerdem komme ich jetzt auch beser mit dem Vc++ besesr klarr.
    Und ich habe alle meinen Fehler Korrigiert, also zumindestens started er die Dos anwenndung.

    Auch danke noch mal an die anderen. 🙂

    std ist ein sogenannter Namensraum. Der Compiler kennt die Dinge aus diesem Namensraum nur, wenn man ihm den Namensraum entweder mit using namespace std; bekannt macht oder ihn vorneweg stellt.
    Beispiel:

    namespace meins
    {
        void foobar()
        {}
    }
    
    int main()
    {
       foobar(); //<-- fehler
       meins::foobar(); // <- Ok
    }
    
    #include <string.h>
    

    Es heisst

    #include <string>
    

    Das ist mal wieder das beste Beispiel warum der Dev-C++ mittlerweile Müll ist.
    rya.



  • Kira schrieb:

    Strg + F5

    klappt auch nur mit f5.

    Ja, in beiden Fällen wir das Programm gestartet, aber der Unterschied steckt im Detail.

    Startest du das Progrmam mit Strg + F5 wird das Konsolenfenster nämlich offen gehalten.

    Probier es mit folgendem Programm aus:

    #include <iostream>
    
    int main()
    {
    	std::cout << "Hello World!" << std::endl;
    
    	return 0;
    }
    

    Startest du das Programm mit F5 bendet es sich sofort wieder. Startest du es mit Strg + F5 wartet das Programm noch auf eine Eingabe bevor es sich beendet.


Anmelden zum Antworten