Fehler im Programm: "Ausdruck ergibt keine Funktion"



  • Hi ich bin neu hier,

    Ich lerne grade das Basiswissen von C++ mit Hilfe des Buches "C++ für Spieleprogrammierer". Um den Lernefekt zu erhöhen probiere ich viel aus und hab jetzt ein sehr einfaches Quizspiel geschrieben.

    Nach 41 Fehlern die ich berichtigen konnte bleibt ein Fehler über, den ich nicht weg bekomme...

    //Quizmaster v 1.0
    
    # include <iostream>
    
    using namespace std;
    
    // Prototype's
    
    int Game ();
    int Highscore (int Punkte,int Highscore);
    
    // Main
    
    int main ()
    {
    
    	//Variablen deklaieren
    
    	char chMenue;
    	int Punkte = 0;
    	int Highscore = 0;
    
    	//Schleife Menü
    	do {
    			cout << "Math Quizmaster " << endl;
    			cout << "----------------" << endl;
    			cout << "(S)piel starten" << endl;
    			cout << "(H)ighscore" << endl;
    			cout << "(E)nde" << endl;
    
    			cout << "Bitte Menüpunkt eingeben";
    			cin >> chMenue;
    
    			switch (chMenue)
    			{
    				//Spiel wird gestartet
    				case ('S'):
    				case ('s'):
    				{
    					Punkte =  Game ();
    					Highscore = Highscore (Punkte, Highscore);
    				}break; //Spiel
    
    				//Highscore wird aufgerufen
    				case ('H'):
    				case ('h'):
    				{
    
    					cout << "Der Aktuelle Highscore liegt bei ";
    					cout << Highscore << " Punkten" << endl;
    
    				}break; //Highscore
    
    			}
    	} while( chMenue != 'E' && chMenue != 'e');
    cout << "\nDanke fürs spielen!!!!";
    
    return 0;
    }//Main
    
    //Funktionen defenieren
    
    int Game ()
    {
    	int Punkte;
    	int Auswaehler;
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (1,2,3,4..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 5)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (2,5,3,6,4,7..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 5)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (2, 4, 16..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 256)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (60,54, 42,36, 4..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 18)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    	 cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (3,7,4,6,10,7,9,13,12..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 12)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (6, 18, 54..)" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 162)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (1,9, 18, 26, 35 )" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 43)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (77, 68, 51, 42, 25 )" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 16)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (555, 1110, 1665, 2220 )" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 2775)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    		cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (799, 733, 644, 578, 489 )" << endl;
    	cin >> Auswaehler;
    
    	if (Auswaehler == 423)
    	{	
    		cout << "Super die antwort ist richtig"; Punkte++;
    	}	
    	else
    		cout << "Leider nicht die richtige Antwort";
    
    	cout << "Gratuliere du hast" << Punkte  <<"Punkte ereicht" << endl;
    
    	cout << "Du bist also: ";
    
    	if (Punkte < 2)
    	{
    	cout << "Ein Mathe-Noob!";
    	}
    	else if(Punkte < 4)
    	{
    	cout << "Nicht grade gut in Mathe";
    	}
    	else if(Punkte < 6)
    	{
    	cout << "Solide in Mathe";
    	}
    	else if(Punkte < 8)
    	{
    	cout << "Gut in Mathe";
    	}
    	else if(Punkte < 10)
    	{
    	cout << "Sehr gut in Mathe";
    	}
    	else if(Punkte  == 10)
    	{
    	cout << "Ein Mathekünstler";
    	}
    
    }//Game
    
    int Highscore (int Punkte,int Highscore)
    {
    	if (Punkte > Highscore)
    	{
    		cout << "Super du hast den Highscore geknackt!!!";
    		Punkte = Highscore;
    	}
    	else
    	{
    		cout << "Schade leider kein neuer Highscore!!!";
    	}
    
    return Highscore;
    
    }//highscore
    

    C:\Program Files\Microsoft Visual Studio\MyProjects\mein progi\code.cpp(41) : error C2064: Ausdruck ergibt keine Funktion
    Fehler beim Ausführen von cl.exe.

    Würde mich über Hilfe freuen 🙂



  • Du solltest die Variable in Zeile 21 anders nennen, denn sonst weiß der Compiler nicht, ob du in Zeile 41 den Pointer auf die Funktion "Highscore" oder den Wert der Variablen "Highscore" übergeben möchtest.



  • Was ist denn mit "Pointer" gemeint?



  • Naja der Zeiger eben..



  • Ich hab das ganze mal schnell repariert sodass es sich wenigstens kompilieren lässt, obs jetzt auch das tut was du willst muss du noch selber überprüfen...

    # include <iostream>
    
    using namespace std;
    
    // Prototype's
    
    int Game ();
    int Highscore (int Punkte,int Highscore);
    
    // Main
    
    int main ()
    {
    
        //Variablen deklaieren
    
        char chMenue;
        int Punkte = 0;
        int iHighscore = 0;
    
        //Schleife Menü
        do {
                cout << "Math Quizmaster " << endl;
                cout << "----------------" << endl;
                cout << "(S)piel starten" << endl;
                cout << "(H)ighscore" << endl;
                cout << "(E)nde" << endl;
    
                cout << "Bitte Menüpunkt eingeben";
                cin >> chMenue;
    
                switch (chMenue)
                {
                    //Spiel wird gestartet
                    case ('S'):
                    case ('s'):
                    {
                        Punkte =  Game ();
                        iHighscore = Highscore (Punkte, iHighscore);
                    }break; //Spiel
    
                    //Highscore wird aufgerufen
                    case ('H'):
                    case ('h'):
                    {
    
                        cout << "Der Aktuelle Highscore liegt bei ";
                        cout << Highscore << " Punkten" << endl;
    
                    }break; //Highscore
    
                }
        } while( chMenue != 'E' && chMenue != 'e');
    cout << "\nDanke fürs spielen!!!!";
    
    return 0;
    }//Main
    
    //Funktionen defenieren
    
    int Game ()
    {
        int Punkte = 0;
        int Auswaehler = 0;
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (1,2,3,4..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 5)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (2,5,3,6,4,7..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 5)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (2, 4, 16..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 256)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (60,54, 42,36, 4..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 18)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
         cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (3,7,4,6,10,7,9,13,12..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 12)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (6, 18, 54..)" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 162)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (1,9, 18, 26, 35 )" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 43)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (77, 68, 51, 42, 25 )" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 16)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (555, 1110, 1665, 2220 )" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 2775)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
            cout << "Mit Welcher Zahl wird follgende logische Reihe vortgesetzt? (799, 733, 644, 578, 489 )" << endl;
        cin >> Auswaehler;
    
        if (Auswaehler == 423)
        {   
            cout << "Super die antwort ist richtig"; Punkte++;
        }   
        else
            cout << "Leider nicht die richtige Antwort";
    
        cout << "Gratuliere du hast" << Punkte  <<"Punkte ereicht" << endl;
    
        cout << "Du bist also: ";
    
        if (Punkte < 2)
        {
        cout << "Ein Mathe-Noob!";
        }
        else if(Punkte < 4)
        {
        cout << "Nicht grade gut in Mathe";
        }
        else if(Punkte < 6)
        {
        cout << "Solide in Mathe";
        }
        else if(Punkte < 8)
        {
        cout << "Gut in Mathe";
        }
        else if(Punkte < 10)
        {
        cout << "Sehr gut in Mathe";
        }
        else if(Punkte  == 10)
        {
        cout << "Ein Mathekünstler";
        }
    
    	return Punkte;
    
    }//Game
    
    int Highscore (int Punkte,int Highscore)
    {
        if (Punkte > Highscore)
        {
            cout << "Super du hast den Highscore geknackt!!!";
            Punkte = Highscore;
        }
        else
        {
            cout << "Schade leider kein neuer Highscore!!!";
        }
    
    return Highscore;
    
    }//highscore
    


  • Und noch ein kleiner Tipp.. es sieht ganz so aus als ob du munter an deinem Code weiterschreibst während er sich schon längst nicht mehr kompilieren lässt.

    Du solltest eigentlich nach allen paar Zeilen deinen Code schnell kompilieren lassen, dann ist es auch leichter Fehler zu korrigieren als wie wenn man später alles noch mal überarbeiten muss.



  • Okey,

    Also wie ich das sehe muss ich einfach darauf achten, dass ich Funktionen nicht mit Variablen füttere, die so heißen, wie die Funktion oder?



  • Im Prinzip solltest du für verschiedene Dinge niemals die exakt selben Namen verwenden.



  • Ihhhhh, cut & paste......

    Stiltipp:

    Schon mal was von DRY (Don't Repeat Yourself) gehört?? Packe Fragen und Antworten in eine passende Datenstruktur und erledige das ganze Frage/Antwort-Spielchen mit einem geeigneten Schleifenkonstrukt. Du wirst überrascht sein, wie hübsch Code manchmal aussehen kann 😉 Und wie einfach erweiterbar!!!!!

    Grüße aus der Kaiserstadt


Anmelden zum Antworten