2012-06-30 27 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]; 
} 

Ho usato questa funzione con gcc 4.3.4, e ottenuto il seguente errore:variabile globale "contare" ambiguo

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

sulla mia macchina locale (mingw32), l'errore ho ottenuto è stato this one, anche se non è per int 'cache[]'.

Qualsiasi motivo per cui?

+3

È questo codice C o codice C++? –

+0

@DavidSchwartz questo è il codice C++, ma lo stesso problema si è verificato anche in C. – Amit

+0

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

risposta

41

Il problema è tutto a causa della seconda linea qui:

#include <algorithm> 
using namespace std; 

La linea using namespace std porta tutti i nomi da <algorithm> che ha anche una funzione chiamata count, e nel codice, hai dichiarato una variabile count. Da qui l'errore ambiguo.

La soluzione è mai scrivere using namespace std. È male che male.

Al contrario, utilizzare std::cout, std::cin, std::endl, std::count e così via, nel codice.

+0

Anche se ho rimosso la riga "#include " dal mio codice, l'errore persiste. – Amit

+0

Anche se si utilizza lo spazio dei nomi std, è possibile indicare esplicitamente quale numero si intende scrivendo std :: count per la funzione o :: count per la variabile. – jcoder

+4

@ user801154: Siamo spiacenti. Non ti credo Se c'è ancora errore, significa che c'è più problema (e molto probabilmente l'errore in questo caso è un'altra cosa). Perché non fai quello che ho detto? Rimuovi 'usando la riga namespace std', e usa' std :: cout' e 'std :: cin' ecc. – Nawaz