Я уже пару дней просматривал подобные вопросы, но пока не нашел решения. Спасибо за любую помощь:
У меня есть два файла, один из которых содержит методы для работы с рациональными числами, а другой обрабатывает их в двумерном массиве. Моя проблема заключается в том, что matrix.c не распознает структуру дроби, которая содержится в fra.c. Я считаю, что моя проблема как-то связана с тем, как я объявил свой 2d массив.
В дроби.c:
struct fraction {
int integer;
int num;
int den;
};
typedef struct fraction* fractionRef; //This line is in fraction.h
В matrix.c:
#include "fraction.h"
typedef struct matrix* matrixRef;
struct matrix {
int rows;
int columns;
fractionRef *m;
}matrix;
matrixRef new_matrix ( int rows, int columns ) {
matrixRef matrix;
matrix = (matrixRef)malloc( sizeof( matrix ) );
matrix->m = (fractionRef*)calloc( rows, sizeof( fractionRef ) );
int i;
for ( i=0; i<=rows; i++ )
matrix->m[i] = (fractionRef)calloc( columns, sizeof( fractionRef ) );
assert( matrix->m );
return matrix;
}
void free_matrix ( matrixRef freeMe ) {
if ( freeMe != NULL ){
int i, j;
for( i = 0; i <= freeMe->rows; i++ ){
for ( j = 0; j <= freeMe->columns; j++ ){
free_fraction( freeMe->m[i][j] ); //ERROR OCCURS HERE
}
}
freeMe->rows = 0;
freeMe->columns = 0;
free(freeMe);
freeMe = NULL;
}
}
Ошибка, которую я получаю, соответствует строке в matrix.c, которую я пометил.
matrix.c:47: error: invalid use of undefined type ‘struct fraction’
matrix.c:47: error: dereferencing pointer to incomplete type
Это, наверное, все, потому что я выучил java ДО c, большая ошибка !!! Еще раз спасибо за любую помощь.
РЕДАКТИРОВАТЬ: Спасибо всем. Поэтому, как я вижу это сейчас, все в заголовочных файлах .h похоже на public в java. Мое определение структуры дроби не было «публичным» для компилятора c, поэтому мой matrix.c не смог получить к нему доступ.