2016-05-12 9 views
2

Ich versuche derzeit, ein grundlegendes Quiz-Spiel in C++ zu erstellen.Mit C++ und versuchen, einige Code "verschachteln"

Der folgende Code gibt einen Fehler aus, wenn ich versuche, es auszuführen, funktioniert es, wenn ich Antwort ("Antwort") in der Hauptklasse nicht verwende und stattdessen es mit dem tatsächlichen Code ersetze.

Ich wollte einige der Code "nest" (ich kenne nicht den technischen Begriff), so dass ich nicht immer wieder schreiben musste, wie Sie sehen können, ich hoffte, jede Frage zu schreiben folgte durch Antwort ("Antwort").

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    cout << "QUIZ C++ EDITION!\n"; 
    cout << "Question 1:\n"; 
    cout << "What is the colour you get when you mix red and yellow?\n\n"; 

    question("Orange"); 

    system("PAUSE"); 
} 

void question(string answer) { 
    string input; 

    getline(cin, input); 

    if (input == answer) { 
     cout << "\nCorrectimundo!\n"; 
    } 
    else 
    { 
     cout << "\nWrongimundo.\n"; 
    } 
    return; 
} 

Ich habe das Gefühl, es ist ein Fall von falscher Syntax ist aber die IDE zeigt mir nicht, wo der Fehler ist leider, es geschieht nur, wenn ich das Programm auszuführen.

+1

Was ist der Fehler beim Ausführen? – NathanOliver

Antwort

2

Sie müssen eine Erklärung der Funktion question bereitstellen, bevor Sie sie in main verwenden können. In

void question(string answer); 

vor der Definition von main.

+0

Vielen Dank, funktioniert! :) – JFlagg

2

In C++ Sie eine Funktion deklarieren müssen, bevor Sie es verwenden können (beachten Sie, Definition ist auch eine Erklärung), aber es gibt keine Erwähnung der Funktion question vor Zeile

question("Orange"); 

, wenn es tatsächlich zu bekommen versucht, namens. Fügen Sie eine Erklärung:

void question(string answer); 

int main() 
{ 
    // the rest of code ... 
10

Es sieht aus wie Sie eine Funktion zu machen versuchen. Kann ich helfen?

- Clippy (1997-2007 RIP) enter image description here

Möglichkeiten Zwei dies zu tun. Eine davon besteht darin, question vor seiner ersten Verwendung weiterzuleiten.

void question(string answer); 

int main() 
{ 
    ... 
    question("Orange") 
    ... 
} 

void question(string answer) 
{ ... } 

Eine Vorwärtsdeklaration ist ein Versprechen an die Compiler, die question vollständig irgendwo anders definiert werden, vielleicht später in dieser Datei, vielleicht in einer anderen Datei, vielleicht in einer Bibliothek. Aber es muss irgendwo definiert werden oder das Programm wird kompiliert, aber es wird nicht verlinkt.

Und das andere ist, question vor seiner ersten Verwendung vollständig zu definieren.

void question(string answer) 
{ ... } 

int main() 
{ 
    ... 
    question("Orange") 
    ... 
} 

ziehe ich den zweiten Ansatz, weil es keine Möglichkeit, wie dies zu fallen in eine Falle ist:

void question(int answer); 

int main() 
{ 
    ... 
    question(42) 
    ... 
} 

void question(string answer) 
{ ... } 

und einen Linker Fehler immer die Vorwärtserklärung question aus verändern und zu vergessen, die Definition zu ändern .

+2

upvote nur für die clippy lols –

+0

Das ist eine Weiterleitung _declaration_ obwohl, definitiv nicht eine "define" [ition] –

+1

Ich bekomme immer definiere/Deklaration Terminiology rückwärts. Ich habe einfach nachgesehen, um sicher zu gehen, und ich habe es immer noch zurückgenommen. Schlechtes Internet. Schlecht. Schlecht. Festsetzung. – user4581301

1

Sie haben vergessen, Ihre Funktion zu deklarieren, Sie können es entweder vor main deklarieren oder einfach die ganze Funktion vor main schreiben.

1

Sie müssen hinzufügen, bevor Ihr Haupt:

Leere Frage (string value);