Fragen zum C++ Buch (Kapitel 4....)
-
Hier mal ein Bild davon
ich habe Microsoft Visual C++ 6.0
-
oh hat nicht geklappt dann eben noch ein Versuch
http://img333.imageshack.us/img333/267/programmierseite0wt.th.png
-
Anakin schrieb:
ich habe Microsoft Visual C++ 6.0
rechte mousetaste auf'm treecontrol der projektansicht(dateien) -> dateien zu projekt hinzufügen -> click -> fileopen-dialog erscheint -> datei anklicken (doppelt) -> fertig
-
Hallo
Vielleicht solltest du dir überlegen, ob du dir Visual 2005 holst. das ist kostenlos und nun wirklich aktueller.
Hast du denn nun die datei hinzugefügt? wahrscheinlich lief das bi 6.0 noch anders. Da kann ich dir nicht helfen. Vielleicht mal bei datei schauen.
chrische
-
hab ich gemacht hier die Antwort die darauf kommt
Eine oder mehrere Dateien konnten dem angegebenen Projekt nicht hinzugefügt werden.
Diese Dateien sind bereits im Projekt vorhanden:
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Listing.cppwenn ihr wollt kann ich euch nochmal die aktuellen Fehler auflisten hier:
--------------------Konfiguration: Eigenes Spiel - Win32 Debug--------------------
Kompilierung läuft...
charakter.cpp
Linker-Vorgang läuft...
Listing.obj : error LNK2001: Nichtaufgeloestes externes Symbol "int __cdecl addProzent(int,int)" (?addProzent@@YAHHH@Z)
Debug/Eigenes Spiel.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Eigenes Spiel.exe - 2 Fehler, 0 Warnung(en)
-
Kann ich dann dem Buch noch folgen mit der 2005er Version?
-
du musst die funktion 'addProzent' erstmal lokalisieren. irgendwo muss sie ja sein und dann rein ins projekt damit
-
Hallo
Anakin schrieb:
Kann ich dann dem Buch noch folgen mit der 2005er Version?
Aber klar. Warum auch nicht?
chrische
-
so
ich hab es mit 6.0 schon etwas weiter geschafft aber wieder neuer Fehler und diesmal auch eine Warnung:--------------------Konfiguration: Eigenes Spiel - Win32 Debug--------------------
Kompilierung läuft...
charakter.cpp
Listing.cpp
c:\programme\microsoft visual studio\myprojects\listing 1_1\eigenes spiel\charakter.hpp(1) : warning C4182: Die #include-Verschachtelungsebene ist 362 tief; Endlosschleife moeglich
c:\programme\microsoft visual studio\myprojects\listing 1_1\eigenes spiel\charakter.hpp(1) : fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben
Fehler beim Ausführen von cl.exe.Eigenes Spiel.exe - 1 Fehler, 1 Warnung(en)
-
zeig ma die ersten paar zeilen von charakter.hpp
-
Inkludiert character.hpp sich selber? In jedem Fall solltest du dir Include-Guards angewöhnen:
#ifndef CHARACTER_HPP // Am besten immer der Dateiname #define CHARACTER_HPP /// Eigentlicher Header #endif
-
Hallo
.filmor schrieb:
Inkludiert character.hpp sich selber? In jedem Fall solltest du dir Include-Guards angewöhnen:
#ifndef CHARACTER_HPP // Am besten immer der Dateiname #define CHARACTER_HPP /// Eigentlicher Header #endifIst das besser als
#pragma once??
chrische
-
Zumindest Mirkosoft-unabhängig.
-
hier die ersten zeilen von charakter.hpp
#include "charakter.hpp"
// addProzent (für Integer-Werte)
//
int addProzent (int Wert, int Prozent)
{
int neuerWert;
neuerWert = Wert + (Wert*Prozent)/100;
return neuerWert;
}// addProzent (für Float-Werte)
//
float addProzent (float Wert, int Prozent)
{
float neuerWert;
neuerWert = Wert + (Wert*Prozent)/100.0f;
return neuerWert;
}
-
Warum änderst du nicht, was ich geschrieben habe? Zusätzlich muss das #include "charakter.hpp" da weg, da ist absoluter Blödsinn. Der Präprozessor ist ein einfacher Textprozessor, der stur tut, was man ihm sagt. Das heißt in diesem Fall, dass er immer, wenn er character.hpp eingefügt hat ein weiteres #include "charakter.hpp" sieht und sich so in einer Endlosschleife aufhängt (und genau das sagt auch die Fehlermeldung ...)
-
.filmor schrieb:
Der Präprozessor ist ein einfacher Textprozessor, der stur tut, was man ihm sagt.
aber nicht der von msvc6
warning C4182: Die #include-Verschachtelungsebene ist 362 tief;
offenbar hat der 'nen schleifendetektor (auch wenn der das ziemlich spät bemerkt)

-
net schrieb:
.filmor schrieb:
Der Präprozessor ist ein einfacher Textprozessor, der stur tut, was man ihm sagt.
aber nicht der von msvc6
Och Mensch, muss man hier eigentlich immer wieder dazu schreiben, dass man den Standard meint? Und natürlich ist auch der VC6 Präprozessor ein Textprozessor.
net schrieb:
warning C4182: Die #include-Verschachtelungsebene ist 362 tief;
offenbar hat der 'nen schleifendetektor (auch wenn der das ziemlich spät bemerkt)

Und? Er gibt auch offenbar nur eine Warnung aus (leicht an dem Präfix "warning" zu erkennen :p), dass heißt, er macht trotzdem stur, was man ihm gesagt hat, ist halt nur etwas gesprächiger. Außerdem ist das kein Schleifendetektor (das wäre etwas der Art: "charakter.hpp inkludiert sich selbst ohne eine Präprozessorkonstante zu definieren oder abzufragen") sondern sagt nur mal Bescheid, dass es ihm bald zu bunt wird. Er bricht nur aufgrund einer allgemeineren "Compiler-Grenze" ab.
-
Danke, filmor es hat funktioniert ^^
sry, habe das gelesen aber nicht wirklich kapiert (deinen ersten post)
bin erst auf Seite 116 und da kapier ich das noch net so 100%
-
Neues Problem beim Zahlenraten

Hier mal der Code:
// C++ für Spielerprogrammierer // Listing 4.11 // Zahlenraten // #include <iostream> #include <windows.h> using namespace std; #pragma comment (lib, "winm.lib") // Funktionsprototypen // int Spielen (int Level); int WaehleLevel (int Level); int TesteHighscore (int Punkte, int Highscore); void ZeigeInfos (); // Hauptprogramm // int main () { // Variablen // char Auswahl; // Gewählter Menüpunkt int Level = 5; // Aktueller Level int Highscore = 100;// Aktueller Highscore // Zufallsgenerator initialisieren srand (timeGetTime ()); // Verarbeitung des Menüs do { // Menü ausgeben // cout << "Zahlenraten - Menue" << endl; cout << "-------------------" << endl; cout << "(N)eues Spiel starten" << endl; cout << "(L)evel waehlen" << endl; cout << "(H)ighscore anzeigen" << endl; cout << "(I)nfo" << endl; cout << "(B)eenden" << endl; // 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 << "Der 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' 66 Auswahl != 'B'); // Spiel beenden? cout << "Bis zum nächsten Mal" << endl; return 0; } // main // Zeige Infos // // Aufgabe: Informationen zum Spiel anzeigen // void ZeigeInfos () { cout << "Zahlenraten V1.0" << endl; cout << "Beispiel aus \"C++ fuer Spieleprogrammierer\""; cout yy "\n\n"; } // Zeuge Infos // WaehleLevel // // Aufgabe: Neuen Level auswählen // int WaehleLevel (int Level) { int NeuerLevel; do { // Neuen Level wählen cout << "Aktueller Level: " << Level << endl; cout << "Neuer Level (1 - 10): "; cin >> NeuerLevel; // Ungültigen Level angewählt if (NeuerLevel < 1 || NeuerLevel > 10) { // Fehlermeldung ausgeben cout "Ungueltiger Level-Wert" << endl; } } while (NeuerLevel < 1 || NeuerLevel > 10); // Gewählten Level zurückgeben return NeuerLevel; } // Waehle Level // Spielen // // Aufgabe: Das eigentliche Spiel spielen // int Spielen (int Level) { int Zufallszahl; // Zufallszahl, die erraten werden muss int Bereich = 0; // Zahl, die der Spieler eingibt int Bereich= Level*0; // Bereich der Zufallszahl int Versuche = 0; // Anzahl der bisherigen Versuche int Punkte = 0; // Punktzahl // Zufallszahl ermitteln Zufallszahl = (rand()%Bereich)+1; // Bereich ausgeben, in dem geraten wird cout << "\nDie gesucht 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 hat nicht gestimmt, also Hinweis ausgeben if (GerateneZahl < Zufallszahl) cout << "Die gesuchte Zahl ist groesser" << endl; if (GerateneZahl > Zufallszahl) cout << "Die gesuchte Zahl ist kleiner" << endl; } // Die Zahl wurde erraten! cout << "\nGeschafft ! " << endl; cout << "Du hast die Zahl nach " << Versuche; cout << "Versuchen erraten !\n\n"; // Punkte berechnen // Desto weniger Versuche und desto höher das Level, // je 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 // TesteHighscore // // Aufgabe: Prüfen, ob der Highscore geknackt wurde // int TesteHighscore (int Punkte, int Highscore) { // Prüfen, ob der Highscore geknackt wurde if (Punkte > Highscore) { cout "Glueckwunsch. Neuer Highscore !\n\n"; Highscore = Punkte; } else { cout << "Leider kein neuer Highscore\n\n; } // Highscore zurückgeben return Highscore; } // TesteHighscoreund hier mal die 23 Fehler:
--------------------Konfiguration: Eigenes Spiel - Win32 Debug--------------------
Kompilierung läuft...
Zahlenraten.cpp
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2017: Ungueltige ESCAPE-Folge
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'Punkten'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2017: Ungueltige ESCAPE-Folge
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2065: 'Punkten' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'n'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2001: Zeilenumbruch innerhalb einer Konstanten
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2065: 'n' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'n'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(77) : error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(79) : error C2143: Syntaxfehler : Fehlendes ';' vor '}'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(97) : error C2143: Syntaxfehler : Fehlendes ':' vor ';'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(103) : error C2143: Syntaxfehler : Fehlendes ')' vor 'constant'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(118) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'yy'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(118) : error C2065: 'yy' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(118) : error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(140) : error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(140) : error C2563: Listen der formalen Parameter stimmen nicht ueberein
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(140) : error C2568: '<<' : Aufloesung der Funktionsueberladung nicht moeglich
könnte 'class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > &__cdecl std::endl(class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > &)' sein
c:\programme\microsoft visual studio\vc98\include\ostream(377) : Siehe Deklaration von 'endl'
oder 'class std::basic_ostream<char,struct std::char_traits<char> > &__cdecl std::endl(class std::basic_ostream<char,struct std::char_traits<char> > &)'
c:\programme\microsoft visual studio\vc98\include\ostream(372) : Siehe Deklaration von 'endl'
oder 'class std::basic_ostream<_E,_Tr> &__cdecl std::endl(class std::basic_ostream<_E,_Tr> &)'
c:\programme\microsoft visual studio\vc98\include\ostream(367) : Siehe Deklaration von 'endl'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(157) : error C2374: 'Bereich' : Neudefinition; Mehrfachinitialisierung
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(156) : Siehe Deklaration von 'Bereich'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(169) : error C2065: 'GerateneZahl' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(217) : error C2143: Syntaxfehler : Fehlendes ';' vor 'string'
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(222) : error C2001: Zeilenumbruch innerhalb einer Konstanten
C:\Programme\Microsoft Visual Studio\MyProjects\Listing 1_1\Eigenes Spiel\Zahlenraten.cpp(223) : error C2143: Syntaxfehler : Fehlendes ';' vor '}'
Fehler beim Ausführen von cl.exe.Eigenes Spiel.exe - 23 Fehler, 0 Warnung(en)
Danke schon mal im voraus!
Anakin
-
Schau dir mal das Listing oben an, dann siehst du, dass du einfach bei case ('H') in der Ausgabe hinter Highscore ein Anführungszeichen vergessen hast. Ein bisschen mehr Eigeninitiative bitte.