我是编程新手,不理解这个错误。
我在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;
}
答案 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
)