是的,我知道using namespace std
是一种不好的做法,但是我已经编写了带有该声明的大部分代码,而且我认为我没有时间回去修改它。
使用全局变量的原因是我正在使用多个线程,这些线程需要访问此变量并需要对其进行修改。
我的问题是,我已全局声明int remainder = 0;
,例如在我的主线程中调用remainder = 13 % 5;
。
这给了我一个错误,说'int remainder' redeclared as a different kind of symbol
,并且我读到原因是using namespace std
会覆盖std::modulus
运算符(如果我正确理解的话)。
在将using namespace std
和remainder
保留为全局变量的情况下,我还可以使用什么其他方法来执行此功能?
#include<iostream>
#include<cmath>
using namespace std;
int remainder = 0;
void testing();
int main(){
testing();
cout << remainder << endl;
return 0;
}
void testing(){
remainder = 13 % 5;
}
答案 0 :(得分:4)
问题是您的全局变量名称与标准库中的std::remainder
冲突。 Example on Compiler Explorer。
using namespace std;
的问题在于,它将太多符号带入全局命名空间,几乎是不可避免的错误。除了最简单的玩具程序之外,这对于任何其他事情都是不好的做法。
答案 1 :(得分:3)
与std::remainder
冲突,而不与%
冲突。您选择的变量名称与std
命名空间中的函数冲突。您已经知道using namespace std;
不好,所以我会饶您的。
选项:
丢失using
语句。
重命名remainder
变量。
将remainder
变量放入其自己的名称空间,并通过该名称空间显式引用它。