C错误C2660:'菜单' :function不带3个参数

时间:2017-03-09 19:22:59

标签: c

我是编程新手,不理解这个错误。

我在Menu()函数中有相同的参数,当我在menu_principal()函数中调用相同的函数时。 在函数menu_principal()中,我希望通过函数Menu()使用'选项'执行switch-case语句。变量

你能帮帮忙吗?

int main()
{
    void menu_principal();
    return 0;

}

void menu_principal()
{

    bool stop = true;
    int option;

    const char *title = "MENU PRINCIPAL";
    const char *options_menu[] = { "ARTIGOS", "CLIENTES", "ORCAMENTOS", "SAIR" };
    int n_options = 4; 

    do
    {
        option = Menu(title, options_menu, n_options);

        switch (option)
        {
        case 1:
            Menu_Item();
            break;
        case 2:
            Menu_Client();
            break;
        case 3:
            Menu_Billing();
            break;
        case 4:

            stop = false;
            break;

        }
    } while (stop);

}



int Menu(const char *title1, const char *options_menu1[], int n_options1)
{

    int OptionSelected= 1;
    int key;
    bool stop = true;

    do
    {
        system("cls");

        gotoxy(5, 3 + OptionSelected); printf(">>"); 

        gotoxy(15, 2); printf("%s", title1);


        for (int i = 0; i < n_options1; i++)
        {
            gotoxy(10, 4 + i); 
            printf("%s ", options_menu1[i]);
        }

        do
        {
            key = _getch();
        } while (key != KEY_UP && key != KEY_DOWN && key != KEY_ENTER );


        switch (key)
        {

        case KEY_UP:

            OptionSelected--;

            if (OptionSelected < 1)
            {
                OptionSelected = n_options1;
            }
            break;

        case KEY_DOWN:
            OptionSelected--;
            if (OptionSelected > n_options1)
            {
                OptionSelected = 1;
            }
            break;

        case KEY_ENTER:
            stop = false;
            break;
        }

    } while (stop);


    return OptionSelected;


}

1 个答案:

答案 0 :(得分:1)

编译器从上到下读取您的程序,因此它看到:

option = Menu(title, options_menu, n_options);

在此行中,您调用以前未知的函数Menu 由于函数未知,编译器假定它为int Menu(void)。 (不带参数,返回int)。

这个假设明显不同于Menu最终声明的方式。

要解决此问题,请在文件顶部附近正确声明该功能:

int Menu(const char *title1, const char *options_menu1[], int n_options1);

然后,当编译器遇到你的函数调用时,它不会假定声明,它将使用你已经提供的声明(接受3个参数,并返回int