Следующий код дает мне ошибку компиляции «несовместимые типы при назначении»
Файл 1:
struct a{
int b;
}
Файл 2:
static struct a c;
void test(){
c.b = 0;
}
struct a getStruct(){
test();
return c;
}
Файл 3:
static struct a d;
void setStruct(){
d = getStruct(); (<-- Error)
}
Я искал это и не нашел своей ошибки.
Я полагаю, файлы 2 и 3 также включают файл 1? Показывать полные файлы.
Я предполагаю, что при компиляции файла 3 компилятор не показывает тип getStruct, поэтому он предполагает int.
да 2 и 3 включают файл 1
я меняю структуру d в файле 3 на int, и теперь она работает, так что то, что вы говорите, правильно или? Но как я могу это исправить?
Вероятно, файл 3 не видит ни определения структуры, ни getStruct. Довольно дисфункциональная конструкция программы - иметь getStruct в одном файле и setStruct в другом.
да, я знаю, но я не могу это изменить.
Хорошо, это работает, я интегрирую только прототип из этой функции. Ребята !!
Пожалуйста, всегда повышайте уровень предупреждения. Компилятор должен пожаловаться на использование функции без предварительного объявления. Это должно прямо указывать на отсутствие прототипа.
Корень проблемы может быть в том, что вы компилируете как C90. Вам следует использовать лучший компилятор или правильно настроить тот, который вы используете. Для более старых версий gcc (старше 5.0.0) вы должны компилировать с -std=c99, иначе он перейдет в режим динозавра.





Компилятор обычно предоставляет информацию о том, где возникает ошибка. Не могли бы вы предоставить полный отчет об ошибке?