ошибка типа конфликта предыдущее объявление ___ было здесь - PullRequest
0 голосов
/ 24 февраля 2011
#define TRIP 6
#include <stdio.h>

char error_area(char area_code, char S, char M, char L, char N, char P, char K, char R, char C, char U, char W, char O, char T, char F);

int main(void)
{
  char area_code, S, M, L, N, P, K, R, C, U, W, O, T, F, checkB, travelarea[TRIP];

  printf("Please select from the following that best describes your destination:\n");   /*area code input*/
  printf("S Small city - population under 50,000\n");                                   /*Choices for area code*/ 
  printf("M Medium city - population between 50,000 and 500,000\n");
  printf("L Large city - pop. over 500,000\n");
  printf("N Natural formation like a mountain, a lake, a cave, a geyser, a fjord, a canyon, etc.\n");
  printf("P Designated park or reserve such as a wildlife refuge, a national park, a bioreserve, or a protected marine area\n");
  printf("K Man made landmark like the Great Wall of China, the Taj Mahal, or Stonehenge\n");
  printf("R State or province or region of a country\n");
  printf("C Whole country\n");
  printf("U Multiple countries like traveling through Europe\n");
  printf("W Ocean voyage\n");
  printf("O Any other type of destination - such as visiting the sites of the seven wonders of the world\n");
  printf("Please enter the Area Letter code:");
  scanf("%c", &area_code);   

  checkB = error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F);
  while (checkB == F)                              /*error loop for error area code*/
    {
      printf("Please re-enter a valid area_code:");
      scanf("%c", &area_code);
      checkB = error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F);
      if (checkB == T)
    {travelarea[0]=area_code;}
    } 

}    

error_area(area_code, S, M, L, N, P, K, R, C, U, W, O, T, F)   /*area code error check*/
{

  if ( (area_code == S) || (area_code == M) || (area_code == L) ||(area_code == N) ||(area_code == P) ||(area_code == K) || (area_code == R) ||(area_code == C) || (area_code == U) || (area_code == W) || (area_code == O))
    {
      return T;
    }
  else
    {
      printf("Area code is invalid. (Please make sure code is capitalize)\n");

      return F ;
    }
}

Я получаю эту ошибку:

test2.c:40: error: conflicting types for âerror_areaâ
test2.c:5: error: previous declaration of âerror_areaâ was here

Я продолжаю получать эти сообщения об ошибках при компиляции, и я уверен, что я объявил прототип и его тип в начале, поэтому я не уверен, почему существует конфликт типов. Один из моих преподавателей сказал мне, что это потому, что он был объявлен и определил все типы внизу, где я вызвал error_area, но это не сработало.

1 Ответ

1 голос
/ 24 февраля 2011

То, что вы объявили прототип для функции error_area, не означает, что вы теперь можете свободно опускать тип возвращаемого значения и типы параметров в определении . Когда вы определяете ваш error_area, вы все равно должны явно указывать все типы

char error_area(char area_code, char S, char M, char L, char N, char P, char K, char R, char C, char U, char W, char O, char T, char F)
{
  ...

Вместо этого вы определили свой error_area без явных имен типов. Определение было интерпретировано в соответствии со «старыми» правилами, т. Е. Все отсутствующие типы считались int, поэтому то, что вы определили, эквивалентно

int error_area(int area_code, int S, ... /* and so on */
{
  ...

Это полностью отличается от того, что вы сказали в прототипе. Поэтому компилятор говорит вам, что ваше объявление противоречит вашему определению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...