2016-05-12 3 views
2

В настоящее время я пытаюсь создать основную викторину на C++.Использование C++ и попытка «вложить» некоторый код

Следующий код вызывает ошибку, когда я пытаюсь запустить его, он работает, если я не использую ответ («ответ») в основном классе и вместо этого заменяю его фактическим кодом.

Я хотел «гнездо» (я не знаю технического термина) некоторого кода, чтобы мне не приходилось постоянно его записывать, поскольку вы можете видеть, что я надеялся написать любой вопрос ответом («ответ»).

#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; 
} 

У меня есть ощущение, что это случай неправильного синтаксиса, но IDE не показывает мне, где ошибка, к сожалению, это происходит только тогда, когда я запускаю программу.

+1

Какая ошибка возникает во время работы? – NathanOliver

ответ

2

Вам необходимо предоставить объявление о функции question, прежде чем вы сможете использовать ее в main. Add

void question(string answer); 

до определения main.

+0

Большое спасибо, работает! :) – JFlagg

2

В C++ вы должны объявить функцию, прежде чем вы можете использовать его (обратите внимание, определение также декларация), но нет никакого упоминания о функции question перед строкой

question("Orange"); 

, когда он на самом деле пытается получить называется. Добавить объявление:

void question(string answer); 

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

Похоже, что вы пытаетесь сделать функцию. Могу ли я помочь?

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

Два способа сделать это. Один из них - переслать объявление question перед первым использованием.

void question(string answer); 

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

void question(string answer) 
{ ... } 

Переднее декларация является обещание компилятору, что question будет полностью определен где-то еще, может быть, позже в этом файле, может быть, в другом файле, может быть, в библиотеке. Но он должен быть определен где-то или программа будет компилироваться, но она не будет связываться.

А другой должен полностью определить question перед первым использованием.

void question(string answer) 
{ ... } 

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

Я предпочитаю второй подход, потому что нет никакой возможности попасть в ловушку, как это:

void question(int answer); 

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

void question(string answer) 
{ ... } 

и получает ошибку компоновщика от изменения опережающего объявления о question и забыть изменить определение ,

+2

upvote только для клипов lols –

+0

Это передовая _declaration_, хотя определенно не «define» [ition] –

+1

Я всегда получаю терминологию определения/декларации назад. Я просто посмотрел, чтобы убедиться, и я все еще получил это назад. Плохой интернет. Плохо. Плохо. Закрепление. – user4581301

1

Вы забыли объявить свою функцию, вы можете либо объявить ее перед основной, либо просто написать всю функцию перед основным.

1

Вам нужно добавить перед вашим главным:

аннулируется вопрос (значение строки);

Смежные вопросы