Compiler ????



  • Also wenn ich ein neues Projekt eröffnen möchte. Dann habe ich erstmal eine große Auswahl. Dann nehme ich eine Win32-Konsolenanwendung. Ist das geeignet dafür ?
    So nachdem ich dies getätigt habe, besteht die Auswahl zw. ein leeres Projet, eine einfache Anwendung, eine "Hallo Welt" Anwendung und eine Anwendung die MFC unterstützt. Nehme ich eine einfache Anwendung bzw. eine Hallo Welt Anwendung dann geht ohne "stdafx.h" garnichts. Nehme ich ein leeres Projekt kommt der besagte Fehler.

    Wie muss ich vorgehen dass ich hier jetzt vernünfig auf C++ Basis den Quellcode eingeben kann ?

    Wie gesagt ich bin da der pure Anfänger !!!

    Mit freundlichen Gruß



  • Datei->Neu
    Projekte Win32-Konsolenanwendung
    ein leeres Projekt

    Datei->Neu
    Dateien C++ Quellcodedatei

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string t1 = "Hallo";
    	cout <<"schitt"<<endl;
    	return 0;
    }
    

    einfügen.

    Funzt bei VC++ problemlos.



  • Coole Sache.

    Funzt jetzt auch.
    Ich habe immer blos nen normales Fenster dann aufgemacht.

    Danke.

    Aber die nächsten Fragen kommen bestimmt bald 🙂

    Aber lacht nicht dabei 😉



  • So.

    Problem strtol zum allgemeinen Verständnis.

    char *fach="2";
             int d=strtol(fach,0,10);
    	int ergebnis=d*2;
    	cout << ergebnis;
    

    OK das funktioniert auch. Ergebnis ist 4.

    Nun habe ich aber schon einen String auf einer Variablen und wollte die auf *fach legen.

    Beispiel:

    char *fach=test;
            int d=strtol(fach,0,10);
            int ergebnis=d*2;
            cout << ergebnis;
    

    Das Problem an der Sache ist,dass ich vorher aus einen String(formel) einen Teil herauskopiert habe und den auf die Variable(test) gelegt habe.
    Und das funktioniert in diesem Fall nicht. Was muss ich anders machen ?



  • Der übergebene nullterminierte String muss schon in einem richtigen Format sein. Aber so ganz ohne Fehlermeldung, und ohne zu wissen wie genau dein test aussieht kann ich dir da jetzt nicht weiterhelfen.

    Gruß
    Entyl Sa



  • OK.

    Auf test liegt 2+3

    Fehler:

    error C2440: 'initializing' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' kann nicht in 'char *' konvertiert werden
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden

    Ich stell mal meinen ganzen Code zur Verfügung. Der Anfang ist bissl bearbeitet. ´Bei der Rechenoperation(Umwandlung usw) Geht es mit erstmal nur um die Funktionalität der Funktionen, wenn dies Funktioniert mache ich es freundlicher 🙂 Habe es bis jetzt erstmal auch nur in einer Klasse. Wird dann ebenfalls geändert.

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    
    using namespace std;
    
    class eingabe()
    {
    	string formel;
    	string test;
    	int i=0, a=0,  b=0;
        cout <<"Ihre Eingabe: ";
    	getline(cin, formel);
    	cout << "Ihre Eingabe war : " << formel<<"\n";
    	int laenge=formel.length();
    	while (i<=laenge-1)
    	{
    		if (formel[i]=='(')
    		{
    			a++;
    		}
    		if (formel[i]==')')
    		{
    			b++;
    		}
            i++;
    	}
    		if ((a==b) && !(formel[0]==')') && !(a<b))
    		{
    		cout <<"String ist OK !!! \n";
    		}
    	    else
    		{
    			cout <<"Ueberpruefen Sie die Aussage auf die korrekte Klammeranzahl !!\n";
    		}
    	 //Hier beginnt die Rechenoperation !!!
    	formel.erase(0,1);							//Erste Zeichen der Formel löschen
    	int pos =formel.find("(");					//Suchen der ersten öffnenden Klammer
    	cout <<pos<<"\n";							//Ausgabe der Position (Integer)
        int pos1 =formel.find(")");					//Suchen der folgenden schließenden Klammer
    	cout <<pos1<<"\n";							//Ausgabe der Position (Integer)
    	int anzahl=pos1-pos;						//Bestimmung der Anzahl der zu löschenden Zeichen
        test.append(formel,pos,anzahl+1);			//rauskopieren aus Formel die Anzahl der Zeichen
        cout << test<<"\n";							//rauskopierte Zeichen liegen jetzt auf test
    	test.erase(0,1);							//löschen der ersten Klammer in Test
    	test.erase(pos1-1,1);						//löschen der letzten Klammer in Test
    	cout <<test<<"\n";							//Ausgabe des Klammerinhaltes */
    	char *fach=test;
        int d=strtol(fach,0,10);
    	int ergebnis=d*2;
    	cout << ergebnis;
    	return 0;
    }
    
    int main()
    {
    	eingabe();
    	return 0;
    }
    


  • Wenn in test "2+3" steht, dann kommst strtol damit eh nicht klar.
    [edit]bzw. er nimmt die erste Zahl[/edit]
    Die Fehlermeldung sagt ja aber ansich schon alles aus, die kannst einen std::string nicht in einen char* konvertieren. Also entweder:

    const char* fach = test.c_str();
    

    oder einfach direkt an strtol übergeben:

    int d=strtol(test.c_str(),0,10);
    

    Gruß
    Entyl Sa



  • OK. Funktioniert..

    Woher wisst ihr sowas immer.

    Und wieso meinst du ist es nicht geeignet ?
    Aus dem String wandelt er jetzt das erste Zeichen um. Wenn ich daran noch rumschnippel (allgemeingültig) dann kann ich doch was damit anfangen. Oder gibt es da noch eine bessere Funktion ?



  • DannyB4281 schrieb:

    Woher wisst ihr sowas immer.

    Eigene Erfahrungen, Schnittstellenbeschreibung, und richtiges lesen von Fehlermeldungen.

    DannyB4281 schrieb:

    Und wieso meinst du ist es nicht geeignet ?

    Wenn du weißt was dir die Funktion liefert dann ist es ja OK, aber nicht das du davon ausgehst das es dir 5 zurückliefert. Ich persönlich würde einen String übergeben der nur eine Zahl enthält.

    Gruß
    Entyl Sa



  • Bin ich jetzt am versuchen....... Die Lücke ist mir schon aufgefallen. Na gut das er mir das icht ausrechnet habe ich mir schon gedacht. 🙂

    Trotzdem erstmal Danke....

    Bis zum nächsten Problem ! 🙂



  • Wie kann ich, nachdem ich jetzt die Berechnung durchgeführt habe, den Integerwert wieder in einen String umwandeln ?



  • Das hier wäre eine C Lösung:

    int i = 1234;
    char c[100];
    sprintf(c,"%d",i);
    

    Gruß
    Entyl Sa



  • Hmm.

    Irdendwas scheine ich bei der Stringdeklaration falsch zu machen.

    Wie deklariert man hier einen String richtig sauber.

    Ich habe es mit:

    string a="Versuch";
    

    probiert.

    Oder was ist da besser geeignet.



  • string a="test1";
    string b("test2");
    

    Ist beides OK und beides C++.
    Wenn du aber eine C++ Lösung für das umwandel eines Integers in einen C++ string brauchst, dann schau doch mal ins C++ FAQ.

    PS: was ist bei dir für ein Problem aufgetreten?



  • Na ich hatte schon eine leere Stringvariable:

    Und so wollte ich dann die Typenumwandlung von Integer in String vornehmen.

    int i=1234;
    string d;
    sprintf(d,"%d",i);
    


  • Deshalb habe ich auch einen char Array benutzt, weil sprintf und damit C das halt vorsieht. Mit std::string funktioniert das natürlich nicht. Da ich ja aber weiß das du eher C++ programmierst habe ich dich an unsere FAQ verwiesen. Ich wollte mir ja nicht schon wieder eine Rüge einholen:

    Bashar schrieb:

    Ihr solltet euch mal Gedanken darüber machen, warum das Forum ANSI-C heißt.

    Also guck mal hier.


Anmelden zum Antworten