未在此范围内声明错误“设置”

时间:2013-03-04 16:58:35

标签: c++ compiler-errors void devkitpro

首先,这是我第一次编写代码,所以我是新手。

我正在使用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()将被激活。那么有人知道如何正确编码吗?

提前致谢。

5 个答案:

答案 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()。