2012-01-02 91 views
2

GCC不斷告訴我:之前預期 ')' ';' 令牌G ++

預期 ')' 前 ';' 令牌,
預期之前 ')' 令牌
預期「基本表達式; '之前')'令牌

而且我找不到問題。這裏是有問題的功能:

void prim(){ 
    prepararEstructuras(); 
    int min,k; 
    for(int i=1;i<nnodos;i++){ 
     min = menorCoste[1]; 
     k = 1; 
     for(int j=2;i<nnodos;j++) 
      if(menorCoste[j] < min){ 
       min = menorCoste[j]; 
       k = j; 
      } 
     solucion[k][masCercano[k]] = G[k][masCercano[k]]; 
     menorCoste[k] = infinito; 
     for(int j=1;j<nnodos;j++) 
      if(G[k][j] < menorCoste[j] && menorCoste[j]!=infinito){ 
       menorCoste[j] = G[k][j]; 
       masCercano[j] = k; 
      }     
    } 
} 

下面是導致問題的行:

if(G[k][j] < menorCoste[j] && menorCoste[j]!=infinito){ 

這裏是我的變量:

#define MAX_NODOS 20000 
#define infinito 10000; 

int nnodos; 
int nAristas; 
int G[MAX_NODOS][MAX_NODOS]; 
int solucion[MAX_NODOS][MAX_NODOS]; 
int menorCoste[MAX_NODOS]; 
int masCercano[MAX_NODOS]; 
+0

此宏對該行有什麼影響? #define infinito 10000; – Hurkyl 2012-01-02 01:08:39

+2

雖然你有什麼是有效的,但我強烈建議將這些'{}'放在這些多行'for'循環中,這樣讀起來就更加困難,而且更容易搞砸了。 – 2012-01-02 01:11:09

回答

12

您有多餘的分號在你的宏中。

#define infinito 10000; 
        ^

擺脫它。

正因爲如此,你的行獲取擴展到這一點:

if(G[k][j] < menorCoste[j] && menorCoste[j]!=10000;){ 
               ^does not belong here 

或者,完全不使用宏:

const int MAX_NODOS = 20000; 
const int infinito = 10000; 
+0

非常感謝你的回答是關於 – 2012-01-02 01:09:38

+0

雖然,你真的應該閱讀預處理器與實際的C代碼 - 瞭解爲什麼這樣一個無辜的額外的分號******你的代碼; – Frunsi 2012-01-02 02:41:44

2

請學會用良好的作風。在外部語句中省略括號(例如,包含其他語句的語句)是非常不正式的

但是,您的實際錯誤在於某些預處理器語句及其結果代碼:#define infinito 10000;會導致在您不期望這樣的額外表達式的表達式之間出現額外的分號。特別是在你不會期望分號的地方。

+0

什麼只能是更糟糕的風格是給所謂的infinito一個設定值。 – casualcoder 2012-01-02 03:06:41

相關問題