LNK2019



  • Hiho,

    ich habe folgenden Code:

    #include <iostream>
    #include <conio.h>
    #include <Windows.h>
    
    using namespace std;
    
    #pragma comment (lib, "winmm.lib")
    
    //Funktionsprotoytpen
    //
    int Spielen (int Level);
    int WaehleLevel (int Level);
    int TesteHighscore (int Punkte, int Highscore);
    void ZeigeInfos ();
    
    //Hauptprogramm
    //
    int main ()
    {
    	//Variablen
    	//
    	char Auswahl; //Menüpunkt
    	int Level = 5; //Aktueller Level
    	int Highscore = 100; //Aktueller Highscore
    
    	//Zufallsgenerator intialisieren
    	srand (timeGetTime () );
    
    	//Verarbeitung des Menü's
    	//
    	do
    	{
    		//Menü ausgeben
    		//
    		cout <<" Zahlen raten - Menue" << endl;
    		cout <<"---------------------" << endl;
    		cout <<"(N)eues Spiel starten" << endl;
    		cout <<"(L)evel auswaehlen   " << endl;
    		cout <<"(H)ighscore anzeigen " << endl;
    		cout <<"(I)nfo               " << endl;
    		cout <<"(B)eenden\n\n        ";
    
    		//Eingabe abfragen
    		//
    		cout <<"Auswahl: ";
    		cin >> Auswahl;
    
    		//Je nach Eingabe verzweigen
    		//
    		switch (Auswahl)
    		{
    			//Neues Spiel starten ?!
    			//
    		case ('n'):
    		case ('N'):
    			{
    				//Spielen
    				//
    				int Punkte;
    				Punkte = Spielen (Level);
    
    				Highscore = TesteHighscore (Punkte, Highscore);
    
    			} break;
    
    			//Level wählen
    			//
    		case ('l'):
    		case ('L'):
    			{
    				Level = WaehleLevel (Level);
    
    			} break;
    
    			//Highscore anzeigen
    			//
    		case ('h'):
    		case ('H'):
    			{
    				cout <<"\nDer aktuelle Highscore liegt bei ";
    				cout << Highscore <<" Punkten\n\n";
    
    			} break;
    
    			//Informationen anzeigen
    			//
    		case ('i'):
    		case ('I'):
    			{
    				ZeigeInfos ();
    
    			} break;
    
    			//Spiel beenden ?!
    			//
    		case ('b'):
    		case ('B'):
    			{
    				cout <<"Spiel beendet." << endl;
    
    			} break;
    
    			//Falsche Eingabe
    			//
    		default:
    			{
    				cout <<"Falsche Eingabe!\n\n";
    			}
    		}
    	} while (Auswahl != 'b' && Auswahl != 'B'); //Spiel beenden ?
    	cout <<" Bis zum nächsten Mal" << endl;
    
    	_getch ();
    	return 0;
    } //main
    
    //ZeigeInfos
    //
    // Aufgabe: Informationen zum Spiel anzeigen
    //
    void ZeigeInfos ()
    {
    	cout <<"Zahlenraten V1.0" << endl;
    	cout <<"Beispiel aus \"C++ fuer Spieleprogrammierer\"";
    	cout <<"\n\n";
    
    } //ZeigeInfos
    
    //WaehleLevel
    //
    //Aufgabe: Neuen Level auswählen
    //
    int WahleLevel (int Level)
    {
    	int NeuerLevel;
    
    	do
    	{
    		//Neuen Level auswählen
    		//
    		cout <<"Aktueller Level: " << Level << endl;
    		cout <<"Neuer Level (1-10): ";
    		cin >> NeuerLevel;
    
    		//Ungültigen Level gewählt ?!
    		//
    		if (NeuerLevel < 1 || NeuerLevel > 10)
    		{
    		//Fehlermeldung ausgeben
    		//
    		cout <<" Ungültiger Levelwert." << endl;
    		}
    
    } while (NeuerLevel < 1 || NeuerLevel > 10);
    		//Gewählten Level zurückgeben
    		//
    		return NeuerLevel;
    	}
    
    	//Spielen
    	//
    	//Aufgabe: Das eigentlich Spiel spielen
    	//
    
    	int Spielen (int Level)
    	{
    		int Zufallszahl;        //Zufallszahl, die erraten werden muss
    		int GerateneZahl = 0;   //Zahl die geraten wurde
    		int Bereich = Level*10; //Bereich d. Zufallszahl
    		int Versuche = 0;       //Anzahl d. bisherigen Versuche 
    		int Punkte = 0;         //Punktzahl
    
    		//Zufallszahl ermitteln
    		Zufallszahl = (rand () %Bereich)+1;
    
    		//bereich ausgeben in dem geraten wird
    		//
    		cout <<"\n Die gesuchte Zahl liegt zwischen 1 und ";
    		cout << Bereich << endl;
    
    		//So lange raten, bis die Zahl gefunden wurde
    		//
    		while (GerateneZahl != Zufallszahl)
    		{
    			cout <<"Dein Tipp: ";
    			cin>> GerateneZahl;
    
    			Versuche++;
    
    			//zahl falsch, also Hinweis ausgeben
    			//
    			if (GerateneZahl < Zufallszahl)
    				cout <<" Die gesuchte Zahl ist größer." << endl;
    			if (GerateneZahl > Zufallszahl)
    				cout <<" Die gesuchte Zahl ist kleiner." << endl;
    		}
    
    		//Die Zahl wurde erraten
    		//
    		cout <<" \nGeschafft !" << endl;
    		cout <<" Du haste die Zahl nach " << Versuche;
    		cout <<" Versuchen erraten ! \n\n";
    
    		//Punkte brechnen
    		//Desto weniger Versuche und desto höher das Level
    		//Desto mehr Punkte werden vergeben
    
    		Punkte = Bereich - Versuche + 1;
    		Punkte *= Level;
    
    		//Wenn mehr Versuche benötigt wurden als es Zahlen gibt,
    		//kann das Ergebnis negativ sein.
    		//
    		if (Punkte < 0)
    			Punkte = 0;
    
    		//Punkte ausgeben
    		cout <<"Punkte: " << Punkte << endl;
    
    			//Punkte zurückgeben
    			return Punkte;
    	} //Spielen
    
    	//Teste Highscore
    	//
    	//Aufgabe: Prüfe ob der Highscore geknackt wurde
    	//
    	int TesteHighscore (int Punkte, int Highscore)
    	{
    		//Prüfen ob der Highscore geknackt wurde
    		//
    		if (Punkte > Highscore)
    		{
    			cout <<" Glueckwunsch. Nuer Highscore!\n\n";
    			Highscore = Punkte;
    		}
    		else
    		{
    			cout <<" Highscore wurde nicht geknackt!\n\n";
    		}
    
    	//Highscore zurückgeben
    	return Highscore;
    	}
    

    Und folgendes Problem:

    Zahlen_raten.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl WaehleLevel(int)" (?WaehleLevel@@YAHH@Z)" in Funktion "_main".

    Habe schon rumprobiert bis zum geht nicht mehr (Auch makiert und F1 gedrückt ;)), aber keine Lösung gefunden, wäre nett, wenn mir hier jmd. helfen könnte.

    Schonmal Danke für evtl. Antworten.



  • Ist WaehleLevel() wirklich in der selben .cpp Datei wie main() ?



  • Du hast in Zeile 13 eine Funktion "WaehleLevel()" deklariert (die auch von main genutzt wird), aber später wird nur eine "WahleLevel()" definiert (Zeile 134 - das fehlende e macht einen gewaltigen Unterschied aus).


Anmelden zum Antworten