fatal error LNK1561
-
Hallo,
Ich habe mir zum lernen von C++ das Tutorial von "Volkarts" vorgenommen!
Ich habe grade das Thema mit den Klassen angeschnitten, da versteh ich so einiges trotz kleiner erklärung nicht!Bevor ich das Problem erläuter, vielleicht noch eben eine Frage!
Wozu unterscheidet man unter "Private" und "Public".
Die erklärung im tutorial ist nur, das man auf Public zugreifen kann!
In wie fern ist das gemeint?Zu meinem Problem, ich habe versucht das "Nimm-Spiel" aus dem Tutorial um zu bauen, aber am Ende gibt es immer einen :
LINK : fatal error LNK1561: Einstiegspunkt muss definiert werden.
Bin total ratlos, wodrauf das zurück zuführen ist.#include <iostream> class NimmSpiel { private: int anzahldermuenzen; public: void zug_meiner() { int ergebnis; std::cout << " Es liegen noch " << anzahldermuenzen << " Münzen auf dem Tisch" << std::endl; std::cout << " Wie viele Münzen wollen sie nehmen?" << std::endl; std::cin >> ergebnis; anzahldermuenzen=anzahldermuenzen-ergebnis; }; void zug_rechner() { int zugki = anzahldermuenzen%4; if(zugki == 0) anzahldermuenzen=anzahldermuenzen-1; else anzahldermuenzen=anzahldermuenzen-zugki; }; bool gewonnen() { return anzahldermuenzen == 0; }; void Spielstart() { std::cout << "Mit wie vielen Münzen möchten sie spielen?" << std::endl; std::cin >> anzahldermuenzen; }; void main() { NimmSpiel spiel; spiel.Spielstart(); while(true) { spiel.zug_rechner(); if(spiel.gewonnen()) { std::cout << "Der Computer hat gewonnen!" << std::endl; return; }; spiel.zug_meiner(); if(spiel.gewonnen()) { std::cout << "Ich habe gewonnen! Yuhu!" << std::endl; return; }; }; }; };Gruß Christian
-
die main-funktion muss eine freie Funktion sein. Wir sind schließlich nicht in Java

Ich vermute mal du hast einfach vergessen nach der letzten Methode (Spielstart) die Klammer der Klasse zu schließen und hast sie dann nach entsprechender Fehlermeldung einfach ganz am Ende eingefügt?
-
Die main-Funktion muß immer global sein (d.h. sie darf nicht Teil einer Klasse sein - nicht wie in Java oder C#).
Und 'private' bedeutet, daß man von außen nicht auf die Member zugreifen kann (sondern nur innerhalb der Klassenfunktionen), d.h. z.B. die Variable 'anzahldermuenzen' kann nur innerhalb der Klasse NimmSpiel gelesen und geschrieben werden.
Wenn du also die main-Funktion global gemacht hast, wird dir bei
int main() { NimmSpiel spiel; int count = spiel.anzahldermuenzen; }der Compiler einen Fehler bzgl. der Sichtbarkeit dieser Variablen anzeigen.
-
Und 'private' bedeutet, daß man von außen nicht auf die Member zugreifen kann (sondern nur innerhalb der Klassenfunktionen), d.h. z.B. die Variable 'anzahldermuenzen' kann nur innerhalb der Klasse NimmSpiel gelesen und geschrieben werden.
Nennt man das nicht auch Lokale Variable?
Aber danke schonmal, ich habe grob verstanden was das bedeutet!
Ich konnte so auch den Fehler finden, ich dachte das main() mit in die Klasse muss!
-
Skywalker077 schrieb:
Und 'private' bedeutet, daß man von außen nicht auf die Member zugreifen kann (sondern nur innerhalb der Klassenfunktionen), d.h. z.B. die Variable 'anzahldermuenzen' kann nur innerhalb der Klasse NimmSpiel gelesen und geschrieben werden.
Nennt man das nicht auch Lokale Variable?
Der Begriff "lokale Variable" wird eher für Variablen genommen, welche lediglich innerhalb einer Funktion sichtbar und bekannt sind.
Aber wenn du so willst, kannst Membervariablen als Klassen-lokale Variablen anschauen, obwohl das wohl eher unüblich ist das so zu nennen.
-
Okay, danke!
Kannst du vielleicht anhand einen Beispiels noch erläutern, wofür die Klassen nachher gut sind?
Bisher sehe ich nur, das darin eine Art von Funktion drin geschrieben wird, um später nicht dauern das erneut zu schreiben, aber wofür sind die Klassen?Ich danke euch schonmal für die super aufkärung bisher

-
Wikipedia: http://de.wikipedia.org/wiki/Objektorientierte_Programmierung
sollte erklären was Klassen sind
-
Ganz grob gesagt:
Klassen sind dazu da Funktionen mit den Daten, auf denen sie operieren zu Verbinden und eine einheitliche Struktur zu bieten.
Sie sind sozusagen der Grundbaustein der modernen OOP. Aber Klassen sind nur ein Hilfsmittel, um OOP umzusetzen. Grundsätzlich ist Objektorientierung ein allgemeiner Begriff, und das solltest du dir doch auch ein wenig im Hinterkopf behalten, wenn du den Link von pumuckl durchliest.
Also: Mit Klassen kann man OOP gut demonstrieren und umsetzen, aber Klassen != OOP!
-
Danke, super zusammenfassung

Den Link zu Wiki hatte ich schon per Google gehabt.