2013-08-06 221 views
2

我在Microsoft Visual C++ 2010 Express中做的C項目中出現了一個非常奇怪的語法錯誤。我有以下代碼:C語法錯誤:缺少';'在'type'之前

void LoadValues(char *s, Matrix *m){ 
    m->columns = numColumns(s); 
    m->rows = numRows(s); 
    m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns)); 
    int counter = 0; 
    double temp; 
    bool decimal; 
    int numDec; 
    while(*s != '\0'){ 
     . 
     . 
     . 
    } 
} 

當我嘗試構建解決方案時,出現「缺失」;「在爲我的所有變量(temp,counter等)輸入「error」之前,試圖在while循環中使用它們中的任何一個都會導致「未聲明的標識符」錯誤。我確保bool被定義爲

#ifndef bool 
    #define bool char 
    #define false ((bool)0) 
    #define true ((bool)1) 
#endif 

位於.c文件的頂部。我已經搜索了堆棧溢出的答案,有人說,舊的C編譯器不讓你聲明和初始化變量在同一個塊,但我不認爲這是問題,因爲當我註釋行

m->columns = numColumns(s); 
m->rows = numRows(s); 
m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns)); 

所有的語法錯誤消失了,我不知道爲什麼。任何幫助表示讚賞。

---編輯---- 請求矩陣代碼

typedef struct { 
    int rows; 
    int columns; 
    double *data; 
}Matrix; 
+0

您是否嘗試過移動你試圖註釋掉下面的變量定義,例如三線'int numDec;'之後? – dunc123

+0

你的class Matrix {...};定義後面跟着一個分號,對吧? – dasblinkenlight

+0

您需要展示更多代碼。 Matrix是什麼? – Jiminion

回答

6

在C編譯器與C99(即微軟的Visual C++ 2010)(感謝Mgetz指出這點)不符合,你不能在塊的中間聲明變量。

所以儘量把變量聲明爲塊的頂部:

void LoadValues(char *s, Matrix *m){ 
    int counter = 0; 
    double temp; 
    bool decimal; 
    int numDec; 
    m->columns = numColumns(s); 
    m->rows = numRows(s); 
    m->data = (double*)malloc(sizeof(double) * (m->rows * m->columns)); 
    while(*s != '\0'){ 
     . 
     . 
     . 
    } 
} 
+1

不老,只是不兼容C99,而MSVC10不兼容。 – Mgetz

+0

@Dukeling謝謝,完美的工作!是的,當我讀到那篇文章時,我認爲你不能這樣做「int counter = 0;」在一行中,你需要把它分解爲「int counter; counter = 0;」。 再次感謝! – Personofblah

相關問題