Во-первых, это один из моих первых примеров написания кода, поэтому я новичок.
Я пишу для nds, используя devkit pro, и поэтому все написано на c ++. Я хочу иметь меню, каждый экран меню является пустым, и мне нужен способ вернуться в предыдущее меню.
Кроме того, я удостоверился, что в реальном коде НЕТ синтаксических ошибок (если не объявлено в этой области считается синтаксической ошибкой).
Как я могу сделать это без получения «Ошибка« настройки »не была объявлена в этой области». Код:
//Headers go here
void controls()
{
//Inits and what not go here
if (key_press & key_down)
/*This is generally how you say if the down key has been pressed (This syntax might be wrong, but ignore that part)*/
{
settings(); //This part doesn't work because it can't read back in the code
}
}
void settings()
{
//Inits and what not go here
if (key_press & key_down)
{
controls();
}
}
void mainMenu()
{
//Inits and what not go here
if (key_press & key_down)
{
settings();
}
}
И ОБРАТИТЕ ВНИМАНИЕ, где-то за пределами этого кода mainMenu () будет активирован. Так кто-нибудь знает, как правильно это кодировать?
Заранее спасибо.
В момент вызова вашей функции ваш компилятор ничего не знает об этой функции. Есть два способа сделать так, чтобы компилятор знал о вашей функции: декларация а также определение.
Чтобы объявить функцию, вы должны поместить краткий обзор функции (аргументы функции и возвращаемые значения) в верхнюю часть модуля компиляции следующим образом.
void settings(void);
Чтобы решить вашу проблему, вы должны иметь settings()
Функция объявлена до первого ее вызова.
В вашем случае вы, вероятно, должны объявить функцию в верхней части файла. Таким образом, компилятор будет знать о функции и аргументах, которые должны быть переданы.
void settings();
void controls()
{
...
}
void settings()
{
...
}
void mainMenu()
{
...
}
Хорошая статья, чтобы начать и получить некоторые дополнительные детали: Декларация и определение в MSDN
settings()
это локальная функция. Это можно назвать только после его определение. Переместить определение выше controls()
или сделайте его доступным через заголовочный файл.
Быстрое решение состоит в том, чтобы добавить предварительную декларацию для settings()
до controls()
вот так:
void settings() ;
Полный код:
//Headers go here
void settings() ;
void controls()
{
//Inits and what not go here
if (key_press & key_down)
/*This is generally how you say if the down key has been pressed (This syntax might be wrong, but ignore that part)*/
{
settings(); //This part doesn't work because it can't read back in the code
}
}
void settings()
{
//Inits and what not go here
if (key_press & key_down)
{
controls();
}
}
void mainMenu()
{
//Inits and what not go here
if (key_press & key_down)
{
settings();
}
}
Также смотрите эту предыдущую тему C ++ — предварительное объявление
Проблема в том, что settings () объявляется после controls (), и управляющие элементы пытаются вызвать settings (). Однако так как settings () еще не существует, он не может этого сделать.
Вы можете либо переместить определение параметров () до определения элементов управления (), либо вы можете сделать предварительное объявление настроек () перед элементами управления ().
void settings(); //forward declaration
void controls() {
.....
}
void settings() {
....
}
Сначала вы объявили settings () в вашем заголовочном файле? Кроме того, я не вижу, чтобы вы определяли какие-либо из ваших методов для имени класса или пространства имен, как вы, вероятно, сделали бы, если бы эти методы были объявлены в заголовочном файле.
Если вам НЕ нужен заголовочный файл по какой-либо причине, измените порядок записи. Определите настройки (), прежде чем использовать его.