全局变量"计数"含糊不清

18 c++ variables global

#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]; 
}
Run Code Online (Sandbox Code Playgroud)

我在gcc 4.3.4中使用了这个函数,并得到以下错误:

prog.cpp: In function ‘int f(int)’:
prog.cpp:38: error: reference to ‘count’ is ambiguous
Run Code Online (Sandbox Code Playgroud)

在我的本地机器(mingw32)上,我得到的错误是这个,虽然它不适合int 'cache[]'.

有什么理由吗?

Naw*_*waz 59

问题是因为这里的第二行:

#include <algorithm>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

该行using namespace std带来了所有名称,<algorithm>其中也有一个函数被调用count,并且在您的代码中,您已声明了一个变量count.因此模棱两可的错误.

解决方案是永远不要using namespace std.这是糟糕的坏事.

相反,使用std::cout,std::cin,std::endl,std::count等等,在你的代码.

  • @ user801154:你错了.这是[您的原始代码.](http://ideone.com/awkOZ)这是[您的代码与建议的更改.](http://ideone.com/p3hDf)后者编译并运行得很好. (6认同)
  • @ user801154:抱歉.我不相信你.如果仍然存在错误,则表示存在更多问题(在这种情况下,错误很可能是其他错误).你为什么不做我说的话?删除`using namespace std`行,并使用`std :: cout`和`std :: cin`等. (4认同)
  • @Nawaz,是的,我明白您的观点,可能在我包含的头文件中声明了“count”,如果我将变量名称更改为“countOne”,它就可以正常工作。 (2认同)
  • @ user801154:在该截图中,您的`tets.cpp`文件已更新但未保存,并且编译器在该行上没有"count"时第14行抱怨"count"未声明,而第28行则出现第二个错误当你的代码短于28行时...... (2认同)