Zeiger und Referenzen
-
Hallo
Ich habe mir neulich das Buch "C++ für Spieleprogrammierer" von Heiko Kalista
gekauft und komme nicht mehr weiterBei meinem Code wird folgende Fehlermeldung ausgegeben:
1>l2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl BerechnePunkte(int *,int)" (?BerechnePunkte@@YAXPAHH@Z)" in Funktion "_main".
1>C:\Users\Josh\documents\visual studio 2010\Projects\Passwort\Debug\Passwort.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Hier mal mein Codesnippet
#include <iostream> using namespace std; void ladeLevel(const int level); void BerechnePunkte(int *pPunkte,const int Bonus); void ZeigeDaten(int &Punkte,int &Energie,const int &Team); int main() { const int level = 1; int Energie = 1000; int Punkte =0; const int Team = 1; const int Bonus = 550; ladeLevel(level); BerechnePunkte(&Punkte, Bonus); ZeigeDaten(Punkte, Energie, Team); system("Pause"); return 0; } void ladeLevel(const int level) { cout << "Level " << level << endl; } void BerechenPunkte(int *pPunkte,int Bonus) { *pPunkte += Bonus; } void ZeigeDaten(int &Punkte,int &Energie,const int &Team) { cout << "Es gibt 550 Bonus Punkte\n" << endl; cout << "Daten des Spielers: " << endl; cout << "Energie: " << Energie << endl; cout << "Punkte: " << Punkte << endl; cout << "Team: " << Team << endl; }
-
Das ist vermutlich einer der Schreibfehler, die hier jedem schonmal passiert sind - vergleich mal die Deklaration ganz genau mit der Definition:
void BerechnePunkte(int *pPunkte,const int Bonus); ... void BerechenPunkte(int *pPunkte,int Bonus) { *pPunkte += Bonus; }PS: Aussagekräftige Thread-Titel könnten in Zukunft hilfreich sein

-
Du hast bei der Definition das const vergessen..
Edit: zu langsam..
-
int und const int sind verschiedene Typen. Der Compiler sieht die Deklarationen in den Zeile 8 und 34 als unterschiedliche Überladungen einer Funktion BerechnePunkte. In der main() kennt er nur die erste und nimmt an, dass diese gemeint ist. Später findet der Linker aber dann nur die zweite, weil es keine Definition für die erste Funktion gibt.
Lösung: Mach das const weg, es ist an der Stelle völlig sinnlos.edit: Doppelt zu langsam.
-
314159265358979 schrieb:
Edit: zu langsam..
Trotzdem auch hilfreich - die Stelle hatte ich auch noch übersehen.
-
Ich habe so das gefühl,dass das immer noch falsch ist
#include <iostream> using namespace std; void ladeLevel(int level); void BerechnePunkte(int *pPunkte,int Bonus); void ZeigeDaten(int &Punkte,int &Energie,int &Team); int main() { int level = 1; int Energie = 1000; int Punkte =0; int Team = 1; int Bonus = 550; ladeLevel(level); BerechnePunkte(&Punkte, Bonus); ZeigeDaten(Punkte, Energie, Team); system("Pause"); return 0; } void ladeLevel(int level) { cout << "Level " << level << endl; } void BerechenPunkte(int *pPunkte,int Bonus) { *pPunkte += Bonus; } void ZeigeDaten(int &Punkte,int &Energie,int &Team) { cout << "Es gibt 550 Bonus Punkte\n" << endl; cout << "Daten des Spielers: " << endl; cout << "Energie: " << Energie << endl; cout << "Punkte: " << Punkte << endl; cout << "Team: " << Team << endl; }
-
Da hilft wirklich nur noch sehr genau hinsehen - du hast im Funktionsnamen einen Buchstabendreher eingebaut und "BerechenPunkte" ist nunmal etwas anderes als "BerechnePunkte".
-
Genau das wars ^^ danke @ CStoll und alle anderen
-.- Anfängerfehler
-
SeppJ schrieb:
int und const int sind verschiedene Typen. Der Compiler sieht die Deklarationen in den Zeile 8 und 34 als unterschiedliche Überladungen einer Funktion BerechnePunkte.
Nein, Top-Level-CV-Qualifizierer sind im Hinblick auf die Funktionssignatur irrelevant. Ohne Vertipper wäre das ein und dieselbe Funktion.
Wie sollte auch eine Überladung von
intundconst intaufgelöst werden?
-
Nexus schrieb:
SeppJ schrieb:
int und const int sind verschiedene Typen. Der Compiler sieht die Deklarationen in den Zeile 8 und 34 als unterschiedliche Überladungen einer Funktion BerechnePunkte.
Nein, Top-Level-CV-Qualifizierer sind im Hinblick auf die Funktionssignatur irrelevant. Ohne Vertipper wäre das ein und dieselbe Funktion.
Wie sollte auch eine Überladung von
intundconst intaufgelöst werden?Stimmt. War etwas zu eilig geantwortet, weil's so offensichtlich aussah.