Intereting Posts

Синтаксическая ошибка: отсутствует ‘;’ перед «типом»

Поэтому у меня есть эта ошибка:

Ошибка 3 ошибки C2143: синтаксическая ошибка: отсутствует ‘;’ перед ‘type’ g: \ lel \ tommy \ tommy \ tommy.c 34 tommy

из этого блока кода:

#include  #include  #include  #include  #include  struct matrep { unsigned rows,cols; double *matrix; }; int matrix_read(struct matrep *mat, const char *filename) { FILE *fptr; unsigned m, n; if ((fptr = fopen(filename, "r")) == NULL) { fprintf(stderr, "Cannot Open File %s\n", "matrixA.txt"); return -1; } if (fscanf(fptr, "\n\nnrows %u, columns %u\n\n", &m, &n) != 2) { fprintf(stderr, "Failed to read dimensions\n"); return -1; } mat->matrix = (double *)malloc(sizeof(double) * m * n); if (mat->matrix == 0) { fprintf(stderr, "Failed to allocate %d*%d matrix\n", m, n); return -1; } double *ptr = mat->matrix;//this is where it says that the error occured. for (int i = 0; i < m; i++) { for (int j = 0; j matrix); mat->matrix = 0; mat->columns = 0; mat->rows = 0; return -1; } *ptr++ = x; } } fclose(fptr); mat->columns = m; mat->rows = n; return 0; // Success } int main(int argc, _TCHAR* argv[]) { return 0; } 

Я понятия не имею, что это значит, или где я делаю ошибку. Пожалуйста помоги.

ОБНОВИТЬ:

В то время как исходный вопрос был решен, я получил ту же самую ошибку, но в другом блоке кода, и я пишу в соответствии с рекомендованным выбранным ответом:

 int matrix_multiplication(struct matrep *mat_left,struct matrep *mat_right,struct matrep *result) { if(mat_left->cols != mat_right->rows) { fprintf(stderr, "The number of columns from the left matrix are different from the number of colums from the right matrix"); return -1; } double *p = NULL;//this is where the same error occurs the first time double *pa = NULL; int i,j; result->rows = mat_left->rows; result->cols = mat_right->cols; p = result->matrix; for (pa = mat_left->matrix, i = 0; i rows; i++, pa += mat_left->cols) for (j = 0; j w; j++) *p++ = dot(pa, mat_right->matrix + j, mat_left->cols, mat_right->cols); return 0; } 

Я действительно потерялся здесь, я читаю этот код и понятия не имею, почему он дает мне ту же ошибку.

При компиляции C-программы MSVC не позволяет объявлениям следовать инструкциям в блоке (он использует старые правила C90 – поддержка объявлений, смешанных с утверждениями, была добавлена ​​в C в стандарте 1999 года).

Переместите объявление double *ptr в начало matrix_read() :

 int matrix_read(struct matrep *mat, const char *filename) { FILE *fptr; unsigned m, n; double *ptr = NULL; // ... ptr = mat->matrix; //this is where the error used to occur // ... } 

Я действительно хочу, чтобы MS реализовала это «расширение» для своего компилятора C.

Вы компилируете с помощью c99 или c89?

Ошибка возникает потому, что вы определяете переменную в теле функции (разрешено в c99 не c89). Переместите double *ptr в начало функции, а затем просто назначьте ptr = mat->matrix; где сейчас ошибка.