Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Martin_N

Frischling

  • »Martin_N« ist der Autor dieses Themas

Beiträge: 51

Wohnort: Somewhere in the beautiful world

  • Private Nachricht senden

1

08.03.2012, 18:28

[C++][Funktionsaufruf][Konsole] Wie kann ich eine Funktion aufrufen die einige Zeilen später geschrieben ist?

Hallo zusammen,
ich habe ein Problem mit dem aufrufen von Funktionen, welche erst einige Zeilen später geschrieben sind. Ansich dürfte dies doch kein Problem beim Kompilieren sein, oder irre ich mich? Ich habe bereits gegoogled so wie die Forensuche genutzt, da ich aber nicht fündig geworden bin stelle ich jetzt hier meine Frage. Sollte meine Frage in einem anderen Beitrag bereits beantwortet sein, so bitte ich um den Link und oder die genutzten Suchworte/Tags.

Ich benutze das Programm: Dev-C++

Nun zu meinem eigentliche Problem. Ich programmiere gerade ein Quizspiel in einer Konsole.

Programmablauf:
In der main() Funktion wird lediglich die Instruktion, die Willkommensnachricht erzeugt so wie die Funktion howToProceed() aufgerufen. Die Funktion howToProceed() erwartet eine Eingabe des des Users. So bald der User eine Eingabe getätigt hat, wird die Funktion handleUserChoice() aufgerufen. Je nach Usereingabe wird dann bspw. die Statistik angezeigt und erneut die Funktion howToProceed() aufgerufen um auf eine neue Eingabe des Users zu warten.

So viel zum Ablauf. Beim kompilieren zeigt er mir jedoch folgende Fehlermeldungen:
C:\Dev-Cpp\Projekte\C++ für Spieleprogrammierer\[07.03.2012] Quiz\main.cpp In function `void howToProceed()':

(Zeile: 20) C:\Dev-Cpp\Projekte\C++ für Spieleprogrammierer\[07.03.2012] Quiz\main.cpp `handleUserChoice' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

C:\Dev-Cpp\Projekte\C++ für Spieleprogrammierer\[07.03.2012] Quiz\main.cpp In function `void handleUserChoice(std::string, unsigned int, unsigned int, unsigned int)':

(Zeile: 23) C:\Dev-Cpp\Projekte\C++ für Spieleprogrammierer\[07.03.2012] Quiz\main.cpp `void handleUserChoice(std::string, unsigned int, unsigned int, unsigned int)' used prior to declaration

C:\Dev-Cpp\Projekte\C++ für Spieleprogrammierer\[07.03.2012] Quiz\Makefile.win [Build Error] [main.o] Error 1


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <cstdlib>
#include <iostream>

    using namespace std;
    
    // DECLARE VARIABLES
    string ch_userChoice;
    unsigned int i_userPoints;
    unsigned int i_userFails;
    unsigned int i_userWins;
    

void howToProceed () {
    
    cout << "\n Moechten Sie Ihre Statistik {1} ansehen oder eine Frage {2} bekommen?";
    cout << "\n Ebenso ist es moeglich den Quizmaster via {X} oder {x} zu beenden.";
    cout << "\n Bitte Auswahl treffen: ";
    cin >> ch_userChoice;
    cout << "\n\n";
    handleUserChoice(ch_userChoice, i_userPoints, i_userWins, i_userFails);         
}

void handleUserChoice (string choice, unsigned int points, unsigned int wins, unsigned int fails) {
  // DECLARE VARIABLES 
  char ch_userAnswer;
  if (choice == "1") {
       cout << "\n----------------------*--------------------";
       cout << "\n:: Statistik ::";
       cout << "\n Punkte: " << points;
       cout << "\n Richtige Antworten: " << wins;
       cout << "\n Falsche Antworten: " << fails;
       cout << "\n----------------------*--------------------";
       howToProceed();
       
    } else if (choice == "2") {
       cout << "------------------------------------------";
       cout << "\n:: Lorim ipsum ::";
       cout << "\n <a> larum          <b> darum ";
       cout << "\n <c> sarum          <b> darsm ";
       cout << "\n------------------------------------------";
       cout << "\n Wie lautet die Antwort? : ";
       cin >> ch_userAnswer;
       howToProceed();
    } else if (choice == "x" || choice == "X") {
       system("EXIT");
       cout << "Wenn diese Nachricht angezeigt wird, funktioniert das Skript zu beenden nicht.";
    }
}
int main ()
{
    // DEFINE VARIABLES
    i_userPoints = 0;
    i_userFails = 0;
    i_userWins = 0;
    
    // OUTPUT
    cout << "################################################";
    cout << "\n#                                              #";
    cout << "\n# Autor: Martin Nostadt                        #";
    cout << "\n# Spiel: Quiz                                  #";
    cout << "\n#                                              #";
    cout << "\n#                                              #";
    cout << "\n# How-To:                                      #";
    cout << "\n#                                              #";
    cout << "\n# Spiel beenden        = {X} oder {x}          #";
    cout << "\n# Antwort auswaehlen   = {a}, {b}, {c}, {d}    #";
    cout << "\n# Auswahl bestaetigen  = {enter}               #";
    cout << "\n#                                              #";
    cout << "\n#                                              #";
    cout << "\n#                                              #";
    cout << "\n# Viel Erfolg und Spass!                       #";
    cout << "\n#                                              #";
    cout << "\n################################################";
    cout << "\n\n Herzlich willkommen bei dem Quizmaster von Tesconic!";
    
    howToProceed();
    // handleUserChoice(ch_userChoice, i_userPoints, i_userWins, i_userFails);
    
    cout << "\n\n";
    return 0;
}
Ich mag HTML5 (-:

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

08.03.2012, 18:34

Wechsel zu einer aktuellen IDE wie Visual Studio Express oder Code::Blocks. Dev-Cpp ist hoffnungslos veraltet, verbuggt und tot. (Haben wir irgendwo einen Link auf den man verweisen könnte wenn Dev user kommen?)

Zu deinem Problem: Stichwort forward declaration

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

08.03.2012, 18:36

Zitat

Wechsel zu einer aktuellen IDE wie Visual Studio Express oder Code::Blocks. Dev-Cpp ist hoffnungslos veraltet, verbuggt und tot.

Welch ein Unsinn!?!

Die letzte Version kam erst Dezember 2011 raus.
Und die IDE ist für Anfänger wircklich gut genug. (Auch sehr übersichtlich und einfach zu bedienen)

EDIT:
Zu deinen eigentlichen Problem:
Du rufst in "HowToProceed" die Funktion "HandleUserChoice" auf, bevor der Compiler diese kennt.
In C\C++ muss man Funktionen (leider) erst beim Compiler "anmelden", bevor man sie verwenden kann.

Schreib mal über "void HowToProceed()" folgendes darüber:

C-/C++-Quelltext

1
void handleUserChoice (string choice, unsigned int points, unsigned int wins, unsigned int fails);

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (08.03.2012, 18:42)


valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

4

08.03.2012, 18:50

Zitat

Wechsel zu einer aktuellen IDE wie Visual Studio Express oder Code::Blocks. Dev-Cpp ist hoffnungslos veraltet, verbuggt und tot.

Welch ein Unsinn!?!

Die letzte Version kam erst Dezember 2011 raus.
Und die IDE ist für Anfänger wircklich gut genug. (Auch sehr übersichtlich und einfach zu bedienen)


Du findest es also besser, wenn man die Ide mindestens einmal wechselt? Nur weils funktioniert* soll man nichts besseres benutzen?

*Ich habe auch mit Dev-Cpp angefangen. Welchen Ärger hätte ich mir doch erspart, hätte ich von Anfang an Visual Studio genutzt.
Ich hatte einige Programme, die sich in Dev-Cpp nicht kompilieren liessen, in Visual Studio jedoch nichteinmal ein warning warfen.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

08.03.2012, 18:57

Geht Offtopic:

Natürlich ist VisualStudio selbst in der Express Version besser. Ger keine Frage.
Ich seh bloß nicht den Sinn, weshalb jeder Dev-Benutzer immer sofort auf eine andere IDE verwiesen werden muss.

Dev ist eine gute OpenSource IDE die (zummindest bei mir) problemlos funktioniert.

Code::Blocks-Benutzern zb. macht ihr das ja aucht nicht. (Steckt da nicht sogar der selbe Mingw-Compiler dahiner?)

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

08.03.2012, 19:09

Ich seh bloß nicht den Sinn, weshalb jeder Dev-Benutzer immer sofort auf eine andere IDE verwiesen werden muss.

Weil Dev-Cpp 6 Jahre TOT war?

Das die Entwicklung seit letztem Sommer weitergeht ist zb an mir vorbeigegangen... und da werd ich wahrscheinlich nicht allein mit sein.

Sinn machts trotzdem nicht erst mit Dev anzufangen und dann irgendwann sowieso zu wechseln. Bis es die 6 jahre rückstand wieder aufgeholt hat, wird noch eine menge zeit vergehen in denen vc und c::b wohl nicht stehen bleiben werden...

Martin_N

Frischling

  • »Martin_N« ist der Autor dieses Themas

Beiträge: 51

Wohnort: Somewhere in the beautiful world

  • Private Nachricht senden

7

08.03.2012, 19:22

Danke für Eure Hilfen!
@Sylence:
Ist das richtig, das man mit Hilfe von Zeigern folgende Funktionen bekannt machen kann? Bin auf so etwas mit Deinen Suchworten gestoßen.

@Spiele Programmierer:
Es funktioniert nun! (-:

An alle die über IDEs diskutieren wollen:
Dev-C++, MS Visual Express, Code::Blocks.. zum Henker.. Welche IDE empfehlt Ihr? Und Wieso soll das die beste sein?
Ich mag HTML5 (-:

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

08.03.2012, 19:26

Mit Zeigern hat das jetzt erstmal nichts zu tun.

Das wirst du wahrscheinlich im zusammenhang mit Klassen gefunden haben. Soweit bist du noch nicht ;)

Werbeanzeige