Компилятор возвращает ошибку «char * (int)» отличается по уровням косвенности от «int ()», даже если возвращаемые данные соответствуют типу возврата функции - PullRequest
2 голосов
/ 11 декабря 2010

Я только изучаю C, и это мой первый раз на stackoverflow , поэтому я не уверен, правильно ли это задавать этот вопрос, потому что он кажется тривиальным по сравнению с другими здесь, но я нашел этоткод в учебнике, и когда я пытался скомпилировать в Visual Studio, я получаю это:

**error C2040: 'menutext' : 'char *(int)' differs in levels of indirection from 'int ()'**

Если честно, я посмотрел на код, и я не понимаю, почему компилятор жалуется.Мне действительно нужна помощь в этом.Вот код:

/*********************************************************/
/* */
/* MENU : program which prints out a menu */
/* */
/*********************************************************/
main ()
{ 
  int str_number;
  for (str_number = 0; str_number < 13; str_number++)
  {
    printf ("%s",menutext(str_number));
  }
}
/*********************************************************/
char *menutext(int n) /* return n-th string ptr */
{
  static char *t[] =
  {
    " -------------------------------------- \n",
    " | ++ MENU ++ |\n",
    " | ~~~~~~~~~~~~ |\n",
    " | (1) Edit Defaults |\n",
    " | (2) Print Charge Sheet |\n",
    " | (3) Print Log Sheet |\n",
    " | (4) Bill Calculator |\n",
    " | (q) Quit |\n",
    " | |\n",
    " | |\n",
    " | Please Enter Choice |\n",
    " | |\n",
    " -------------------------------------- \n"
  };
  return (t[n]);
}

1 Ответ

7 голосов
/ 11 декабря 2010

Вы не создавали прототип вашей функции menutext(), и, следовательно, C по умолчанию возвращает тип int.Это заставит printf() пожаловаться (ошибка в вашем случае), потому что он ожидает, что его второй аргумент будет иметь тип char *, а не тип int.

Добавьте следующие две строки выше вызов main()

#include <stdio.h>   /* Needed for the call to printf() */
char *menutext(int); /* Prototype for menutext() */

Кроме того, main() всегда должен возвращать тип int, и если вы не собираетесь передавать какие-либо аргументы, вы должны передать void вчетко заявить, что намерение.Таким образом, верхняя половина вашего кода должна выглядеть так:

#include <stdio.h>   /* Needed for the call to printf() */ 
char *menutext(int); /* Prototype for menutext() */

int main(void)
{
   /* main code here */
   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...