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

użyłem tej funkcji z gcc 4.3.4 i uzyskałem następujący błąd:zmienna globalna "liczyć" niejednoznaczne

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

Na moim komputerze lokalnym (mingw32), błąd Dostałem this one, chociaż nie jest to dla int 'cache[]'.

Każdy powód dlaczego?

+3

Czy to jest kod C, czy kod C++? –

+0

@DavidSchwartz to jest kod C++, ale ten sam problem również wystąpił w języku C. – Amit

+0

@DavidSchwartz: [Nie] (http://ideone.com/qNKQI) [sprawa] (http://ideone.com/6cEXW). – ildjarn

Odpowiedz

41

Problemem jest to wszystko z powodu drugiej linii tutaj:

#include <algorithm> 
using namespace std; 

Linia using namespace std łączy wszystkie nazwy z <algorithm> który ma również funkcję o nazwie count, w kodzie, masz ogłoszony zmienną count. Stąd niejednoznaczny błąd.

Rozwiązaniem jest nigdy napisać using namespace std. Jest źle źle.

Zamiast używać std::cout, std::cin, std::endl, std::count i tak dalej, w kodzie.

+0

Nawet jeśli usunąłem linię "#include " z mojego kodu, błąd będzie nadal występował. – Amit

+0

Nawet jeśli używasz std przestrzeni nazw, możesz jednoznacznie określić, który z haseł masz na myśli, pisząc std :: count dla funkcji lub :: count dla zmiennej. – jcoder

+4

@ user801154: Przepraszamy. Nie wierzę ci. Jeśli nadal występuje błąd, oznacza to, że jest więcej problemów (i najprawdopodobniej błąd w tym przypadku jest czymś innym). Dlaczego nie robisz tego, co powiedziałem? Usuń 'using namespace std' line i użyj' std :: cout' i 'std :: cin' itd. – Nawaz