2012-01-02 68 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

相关问题