2012-06-30 29 views
13
#include <algorithm> 
using namespace std; 

int count = 0, cache[50]; 

int f(int n) 
{ 
    if(n == 2) count++; 
    if(n == 0 || n==1) return n; 
    else if (cache[n] !=- 1) return cache[n]; 
    else cache[n]= f(n-1) + f(n-2); 
    return cache[n]; 
} 

he usado esta función con gcc 4.3.4, y obtuve el siguiente error:Variable global "contar" ambigua

prog.cpp: In function ‘int f(int)’: 
prog.cpp:38: error: reference to ‘count’ is ambiguous 

En mi máquina local (mingw32), el error que me dieron fue this one, aunque no es para int 'cache[]'.

¿Por qué razón?

+3

¿Es este el código C o el código C++? –

+0

@DavidSchwartz esto es código C++, pero el mismo problema ha sucedido en C también. – Amit

+0

@DavidSchwartz: [Does not] (http://ideone.com/qNKQI) [matter] (http://ideone.com/6cEXW). – ildjarn

Respuesta

41

El problema es todo a causa de la segunda línea aquí:

#include <algorithm> 
using namespace std; 

La línea using namespace std hace uso de todos los nombres de <algorithm> que también tiene una función llamada count, y en su código, que se ha declarado una variable count. De ahí el error ambiguo.

La solución es nunca escriba using namespace std. Es malo, malo, malo.

su lugar, utilice std::cout, std::cin, std::endl, std::count y así sucesivamente, en el código.

+0

Incluso si eliminé la línea '#include ' de mi código, el error persiste. – Amit

+0

Incluso si usa el espacio de nombres estándar, puede indicar explícitamente a qué cuenta se refiere escribiendo std :: count para la función o :: count para la variable. – jcoder

+4

@ user801154: Lo siento. No te creo Si todavía hay un error, eso significa que hay más problema (y lo más probable es que el error en este caso sea otra cosa). ¿Por qué no haces lo que dije? Elimine la línea 'using namespace std' y use' std :: cout' y 'std :: cin', etc. – Nawaz