2012-01-02 14 views
2

GCCは私に言って続けて:')' の前に予想される ';' トークンG ++

期待

を ')' の前に ';' 期待する前に、プライマリ・表現予想トークン、
')' トークン
「; '前') 'トークン

そして私は問題を見つけることができませんでした。

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

そして、ここでは私の変数です:ここ

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; 
      }     
    } 
} 

問題を引き起こす行がされています。ここでは問題を抱えている機能がある

#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

+2

あなたが持っているものは有効ですが、それらの '{} 'を複数行の' for'ループの周りに置くことを強くお勧めします。読みにくく、混乱させる方が簡単です。 –

答えて

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

本当にありがとうございます。 –

+0

プリプロセッサと実際のCコードをよく読んでください。なぜこのような無害なセミコロンが追加されたのか理解してください。 – Frunsi

2

してください、GOOD STYLEを使用することを学びます。外部ステートメント(例えば、他のステートメントを含むステートメント)内に角括弧を省略すると、は非常に悪いBADスタイルとなります。

しかし実際のバグはプリプロセッサの文と結果コードにあります。#define infinito 10000;は、そのような追加の式がないと予想される式の間にセミコロンを追加します。特に、セミコロンはまったく期待しません。

+0

悪いスタイルは、infinitoと呼ばれるものに設定値を与えています。 – casualcoder

関連する問題