Problem bei Parameterübergabe. String im Konstruktor



  • Hallo liebe Leute. Ich komme nicht vorran. Ich hantiere grade etwas mit Klassen und bekomme eine Fehlermeldung in der Konsole a la "invalid conversion from "int" to "const char*"" in der Zeile in der ich den Konstruktor in der Main aufrufe.
    Diese Fehlermeldung hilft mir in diesem Kontext nicht. Hat jemand Tipps?
    Das ganze soll übrigens ein Taschenrechner sein der mit Plus und Mal in umgekehrt polnischer Notation rechnet. Vielen Dank für jeden Hinweis.

    #include <iostream>                                     
    #include <string>
    #include <stack>
    #include <stdlib.h> //atoi
    using namespace std;
    
    class Calculator{
    	public:
    		Calculator(string Aufgabe);
    		~Calculator();
    		int compute();
    
    	private: 
    		string expr;
    		stack<int> Stack;
    };
    
    Calculator::Calculator(string Aufgabe){
    expr = Aufgabe;
    };
    
    int Calculator::compute(){
    
    string ::iterator s_iExpr; // Zähler für Ausdruck
    string sNummer;            // Aktuelle Zahl vom Stack
    int Nummer1 = 0;		   // Zwischen den Schritten
    int Nummer2 = 0;
    
    s_iExpr = expr.begin();	   // Zeiger zeigt auf Anfang des Aufgabenstrings
    
    						   // Schleife : Bis das Programm Ende des Aufgabenstrings erreicht
    
    while(s_iExpr != expr.end())
    	{ 
    	sNummer = ""; 			// Immer wieder leer initialisieren
    
    							// SwitchVerzw: Auf Zahl oder OP checken  
    switch (*s_iExpr){	
    	case '+':  Nummer1 = Stack.top();               // Erst Operation durchführen
    			   Stack.pop();				            // Dann die letzten zwei Elemente löschen
    			   Nummer2 = Stack.top();
    			   Stack.pop();
    			   Stack.push(Nummer1 + Nummer2);		// Zwischenergebnis auf Stack ablegen	
    			   Nummer1 = 0;							// Nummer wieder auf 0 setzen
    	           Nummer2 = 0;
    			   s_iExpr++;							// Einen Schritt weiter gehen auf Strink, dann erneut check
    			   break;
    
    	case '*':  Nummer1 = Stack.top();               
    			   Stack.pop();				            
    			   Nummer2 = Stack.top();
    			   Stack.pop();
    			   Stack.push(Nummer1 * Nummer2);		
    			   Nummer1 = 0;							
    	           Nummer2 = 0;
    			   s_iExpr++;							
    			   break;
    
    	default:   sNummer += *s_iExpr;			// Den Wert des Zeigers zwischenspeichern in String 
    			   Stack.push(atoi(sNummer.c_str()));
    			   s_iExpr++;
    			   break;
    				 }
    	}
    cout << Stack.top() << endl;
    };
    
     int main(){
    
     Calculator A('812+4*+'); 
    A.compute();
    return 0;
     };
    


  • Welche Anführungszeichen verwendet man für Strings?



  • 'x' ist ein Zeichen. Der Datentyp hierfür ist char.
    "x" ist ein char-Array. Der Datentyp hierfür ist char[].

    'xxxxx' was du geschrieben hast, gibt es nicht. Es gibt ein Zeichen in Hochkomma und es gibt eben eine Zeichenkette in Anführungszeichen.



  • 😑
    Vielen Dank. Stimmt das war ein offensichtlicher Bock 😃
    Ich muss natürlich erst string Aufgabe = "123+*" initialisieren und dann an den Konstruktor übergeben. Danke 🙂


  • Mod

    out schrieb:

    "x" ist ein char-Array. Der Datentyp hierfür ist char[].

    Genau genommen ist es ein const char[2] . Die Laenge ist genau bekannt und auf const-Korrektheit wird auch geachtet (auch wenn es eine veraltete Konvertierung const char* -> char* gibt, die diese dann wieder komplett ignoriert).


Log in to reply