2014-01-04 5 views
3

Visual Studio показать мне предупреждения как:
предупреждения C4133: '=': несовместимые типы - от 'FILE *' в 'символ *'
предупреждение C4133: 'функции': несовместимые типы - от 'char *' to 'FILE *'предупреждение C4133, несовместимые типы

Предупреждения в строках, где комментарий «эта строка». Как я могу это исправить?

Мой код:

typedef struct { 
int numberOfCity; 
tListOfCity* list; 
double** distances; 
} tDatabase; 

tDatabase* LoadDatabase(char* file) { 
FILE* file; 
tDatabase *input; 
char data[100]; 
int i, j, number = 0; 

input = (tDatabase*) calloc(1, sizeof (tDatabase)); 
input->list = NULL; 

file = fopen("file.txt", "r"); //this line 
fscanf(file, "%d", &number);  //this line 
input->numberOfCity = number; 

input->distances = (double**) calloc(data->numberOfCity, sizeof (double*)); 
for (i = 0; i < input->numberOfCity; i++) { 
    input->distances[i] = (double*) calloc(input->numberOfCity, sizeof (double)); 
} 

for (i = 0; i <= input->numberOfCity; i++) { 
    fgets(data, sizeof (data), file); //this line 
    input->list = AddOnEnd(input->list, CreateCity(data)); 
} 

for (i = 0; i < input->numberOfCity; i++) { 
    for (j = 0; j < input->numberOfCity; j++) { 
     fscanf(file, "%f", &input->distances[i][j]); //this line 
    } 

fclose(file); 
return input; 

}

+2

Код плохо сформирован; ваша функция имеет как параметр, так и локальную переменную с именем «файл». Какая версия компилятора? Visual C++ 2010, 2012 и 2013 все отклоняют этот код как некорректный с «ошибкой C2082: переопределение формального файла параметров». –

+0

@JamesMcNellis Согласен, он не должен компилироваться в первую очередь. –

+0

Visual C++ 2008 Я получаю некоторые другие ошибки. – user3161483

ответ

3

Есть два file переменные в коде. Во-первых, вы передаете параметр как параметр, а другой объявлен как FILE * file. Измените параметр на fileName или что-то подобное и исправьте код, чтобы это отразить.

tDatabase* LoadDatabase(char* fileName) { 
FILE* file; 
tDatabase *input; 
char data[100]; 
int i, j, number = 0; 

input = (tDatabase*) calloc(1, sizeof (tDatabase)); 
input->list = NULL; 

file = fopen("file.txt", "r"); //this line 
fscanf(file, "%d", &number);  //this line 
input->numberOfCity = number; 

input->distances = (double**) calloc(data->numberOfCity, sizeof (double*)); 
for (i = 0; i < input->numberOfCity; i++) { 
    input->distances[i] = (double*) calloc(input->numberOfCity, sizeof (double)); 
} 

for (i = 0; i <= input->numberOfCity; i++) { 
    fgets(data, sizeof (data), file); //this line 
    input->list = AddOnEnd(input->list, CreateCity(data)); 
} 

for (i = 0; i < input->numberOfCity; i++) { 
    for (j = 0; j < input->numberOfCity; j++) { 
     fscanf(file, "%f", &input->distances[i][j]); //this line 
    } 

fclose(file); 
return input; 
} 
+0

Это помогло. Большое спасибо. – user3161483

2

Вы не должны давать такое же имя в качестве аргумента и локальную переменную:

tDatabase* LoadDatabase(char* file) { 
FILE* file; 

И, вероятно, это хорошая возможность сделать вашу функцию уважать имя файла он получает в качестве аргумента (теперь он всегда открывается «file.txt»).

+0

Это помогло. Большое спасибо. – user3161483

Смежные вопросы