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

tôi đã sử dụng chức năng này với gcc 4.3.4, và đã nhận lỗi sau:biến toàn cầu "đếm" mơ hồ

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

Trên máy tính địa phương của tôi (mingw32), lỗi tôi nhận được this one, mặc dù nó không dành cho int 'cache[]'.

Bất kỳ lý do gì?

+3

Đây có phải là mã C hoặc mã C++ không? –

+0

@DavidSchwartz đây là mã C++, nhưng cùng một vấn đề đã xảy ra trong C cũng vậy. – Amit

+0

@DavidSchwartz: [Không] (http://ideone.com/qNKQI) [vấn đề] (http://ideone.com/6cEXW). – ildjarn

Trả lời

41

Vấn đề là tất cả vì dòng thứ hai ở đây:

#include <algorithm> 
using namespace std; 

Dòng using namespace std mang lại tất cả các tên từ <algorithm> mà còn có một chức năng gọi là count, và trong mã của bạn, bạn đã tuyên bố một biến count. Do đó lỗi mơ hồ.

Giải pháp là không bao giờ viết using namespace std. Tệ xấu. Thay vào đó, hãy sử dụng std::cout, std::cin, std::endl, std::count và v.v. trong mã của bạn.

+0

Ngay cả khi tôi đã xóa dòng '#include ' khỏi mã của tôi, lỗi vẫn tồn tại. – Amit

+0

Ngay cả khi bạn đã sử dụng không gian tên std, bạn có thể nói rõ ràng số bạn có nghĩa là bằng cách viết std :: count cho hàm hoặc :: count cho biến. – jcoder

+4

@ user801154: Xin lỗi. Tôi không tin bạn. Nếu vẫn còn lỗi, điều đó có nghĩa, có nhiều vấn đề hơn (và rất có thể lỗi trong trường hợp này là cái gì khác). Tại sao bạn không làm những gì tôi nói? Loại bỏ 'sử dụng không gian tên std' dòng, và sử dụng' std :: cout' và 'std :: cin' vv – Nawaz