name etiquetas description content c

c - etiquetas - Error de sintaxis: falta '';'' antes de ''tipo''



meta name description (2)

¿Estás compilando con c99 o c89?

El error parece ser porque está definiendo una variable dentro del cuerpo de la función (permitido en c99 no en c89). Mueva double *ptr al principio de la función y luego simplemente asigne ptr = mat->matrix; donde el error ahora es.

Así que tengo este error:

Error 3 error C2143: error de sintaxis: falta '';'' antes de ''escribir'' g: / lel / tommy / tommy / tommy.c 34 tommy

de este bloque de código:

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <malloc.h> #include <conio.h> 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 < n; j++) { double x; if (fscanf(fptr, " %5.2lf", &x) != 1) { fprintf(stderr, "Failed to read element matrix[%d,%d]/n", i, j); free(mat->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; }

No tengo idea de lo que eso significa, o de dónde estoy cometiendo el error. Por favor ayuda.

ACTUALIZAR:

Mientras se resolvió la pregunta original, recibí exactamente el mismo error, pero en otro bloque de código, y estoy escribiendo según lo recomendado por la respuesta elegida:

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 < mat_left->rows; i++, pa += mat_left->cols) for (j = 0; j < b->w; j++) *p++ = dot(pa, mat_right->matrix + j, mat_left->cols, mat_right->cols); return 0; }

Estoy realmente perdido aquí, estoy leyendo este código y no tengo idea de por qué me da el mismo error.


Al compilar un programa en C, MSVC no permite que las declaraciones sigan las declaraciones en un bloque (usa las reglas antiguas de C90; el soporte para declaraciones combinadas con declaraciones se agregó a C en el estándar de 1999).

Mueva la declaración de double *ptr a la parte superior de 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 // ... }

Realmente deseo que MS implemente esta ''extensión'' a su compilador de C.