如何在全局变量和命名空间std中使用模数?

时间:2019-03-19 22:39:33

标签: c++ modulus

是的,我知道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 stdremainder保留为全局变量的情况下,我还可以使用什么其他方法来执行此功能?

#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;
}

2 个答案:

答案 0 :(得分:4)

问题是您的全局变量名称与标准库中的std::remainder冲突。 Example on Compiler Explorer

using namespace std;的问题在于,它将太多符号带入全局命名空间,几乎是不可避免的错误。除了最简单的玩具程序之外,这对于任何其他事情都是不好的做法。

答案 1 :(得分:3)

std::remainder冲突,而不与%冲突。您选择的变量名称与std命名空间中的函数冲突。您已经知道using namespace std;不好,所以我会饶您的。

选项:

  1. 丢失using语句。

  2. 重命名remainder变量。

  3. remainder变量放入其自己的名称空间,并通过该名称空间显式引用它。