首先,这是我第一次编写代码,所以我是新手。
我正在使用devkit pro为nds编写,因此它全部用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();
}
}
AND注意,在此代码之外的某处,mainMenu()将被激活。那么有人知道如何正确编码吗?
提前致谢。
答案 0 :(得分:2)
在函数调用时,编译器对此函数一无所知。有两种方法可以使编译识别您的函数:声明和定义。
要声明函数,必须将函数概要(函数参数和返回值)放在编译模块的顶部,如下所示。
void settings(void);
要解决您的问题,您应该在第一次调用之前声明settings()
函数。
在您的情况下,您可能应该在文件顶部声明该函数。通过这种方式,编译器将了解应该传递的函数和参数。
void settings();
void controls()
{
...
}
void settings()
{
...
}
void mainMenu()
{
...
}
开头的好文章并获得一些其他详细信息:Declaration and definition at msdn
答案 1 :(得分:0)
settings()
是一个本地函数。它的定义只能在 之后调用。移动controls()
上方的定义或通过头文件使其可用。
答案 2 :(得分:0)
快速解决方法是在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++ - Forward declaration
答案 3 :(得分:0)
问题是在控件()和控件试图调用settings()之后声明了settings()。但是,由于settings()尚不存在,因此无法执行此操作。
您可以在controls()之前移动settings()的定义,也可以在controls()之前执行settings()的前向声明。
void settings(); //forward declaration
void controls() {
.....
}
void settings() {
....
}
答案 4 :(得分:0)
您是否先在头文件中声明了settings()?此外,我没有看到您将任何方法确定为类名或命名空间,如果这些方法在头文件中声明的话。
如果您不需要头文件,无论出于何种原因,请更改您编写的顺序。在使用之前定义settings()。