[英]Syntax error : missing ';' before 'type'
So i have this error:所以我有这个错误:
Error 3 error C2143: syntax error : missing ';'错误 3 错误 C2143:语法错误:缺少“;” before 'type' g:\\lel\\tommy\\tommy\\tommy.c 34 tommy在“输入”之前 g:\\lel\\tommy\\tommy\\tommy.c 34 tommy
from this block of code:从这个代码块:
#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;
}
I have no idea what that means, or where I'm making the mistake.我不知道这意味着什么,或者我在哪里犯了错误。 Please help.请帮忙。
UPDATE:更新:
While the original question was solved, i have received the exact same error, but in another block of code, and I'm writing as per recommended by the chosen answer:虽然原始问题已解决,但我收到了完全相同的错误,但在另一个代码块中,我正在按照所选答案的建议进行编写:
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;
}
I'm really lost here, I am reading this code and have no idea why it gives me the same error.我真的迷失在这里,我正在阅读这段代码,但不知道为什么它会给我同样的错误。
When compiling a C program, MSVC doesn't allow declarations to follow statements in a block (it uses old C90 rules - support for declarations mixed with statements was added to C in the 1999 standard).编译 C 程序时,MSVC 不允许声明跟在块中的语句之后(它使用旧的 C90 规则 - 在 1999 年标准中添加了对与语句混合的声明的支持)。
Move the declaration of double *ptr
to the top of matrix_read()
:将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
// ...
}
I really wish MS would implement this 'extension' to their C compiler.我真的希望 MS 能够为他们的 C 编译器实现这个“扩展”。
Are you compiling with c99 or c89?你是用c99还是c89编译的?
The error appears to be because you are defining a variable within the body of the function (allowed in c99 not c89).该错误似乎是因为您在函数体内定义了一个变量(在 c99 中允许,而不是在 c89 中)。 Move double *ptr
to the beginning of the function and then just assign ptr = mat->matrix;
将double *ptr
移动到函数的开头,然后只分配ptr = mat->matrix;
where the error now is.现在的错误在哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.