C ++中的全局变量

时间:2010-01-23 22:14:08

标签: c++ global-variables

我应该编写一个应该从main()部分的输入数字读取的程序,然后在其他bool函数中进行一些计算。每次我调用它时,我都不想在函数中插入数字的所有数组和所有其他参数。

我的问题是:我可以在c ++中以某种方式在某些变量中读取输入,但是在main()之外的其他函数也会“知道”这些变量以及它们内部的内容,所以我没有当我调用函数时会放入很多参数?

这是代码:

#include <iostream>
using namespace std;

inline bool del(int n)
{
    int i;
    for(i=0;i<s1;i++)
    {
        if((n % a[i]) == 0) return true;
    }
    return false;
}
inline bool ned(int n)
{
    int i;
    for(i=0;i<s2;i++)
    {
        if((n % b[i]) != 0) return true;
    }
    return false;
}
int main(void)
{
    int s1, s2, a[25], b[25];
        int m, n, i, k=0;
    bool d, nd;
    cin >> s1 >> s2 >> m >> n;
    for(i=0;i<s1;i++)
        cin >> a[i];
    for(i=0;i<s2;i++)
        cin >> b[i];
    for(i=m;i<=n;i++)
    {
        d = del(i);
        nd = ned(i);
        if(d == true && nd == true) ++k;
    }
    cout << k << endl;
    return 0;
}

int s1,s2,a [25],b [25]&lt; - 这些是我需要被其他函数看到的变量(因为我使用它们,你可以看到)。

我尝试将它们声明为全局,但这不起作用,我得到的错误就像“未在此范围内声明”。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

由于这个原因使变量变为全局是一个坏习惯。要么只是将数组传递给函数,要么将整个事物变成对象,并使数组和函数成为类的成员。这就是OOP的意思。

答案 1 :(得分:0)

您所寻找的只是将变量放在全局范围内。我不知道你对“未在此范围内声明”错误的意思,因为以下工作正常:

#include <iostream>
using namespace std;

    int s1, s2, a[25], b[25];

inline bool del(int n)
{
int x = s1 + s2;
    int i;
    for(i=0;i<s1;i++)
    {
        if((n % a[i]) == 0) return true;
    }
    return false;
}
inline bool ned(int n)
{
    int i;
    for(i=0;i<s2;i++)
    {
        if((n % b[i]) != 0) return true;
    }
    return false;
}
int main(void)
{
        int m, n, i, k=0;
    bool d, nd;
    cin >> s1 >> s2 >> m >> n;
    for(i=0;i<s1;i++)
        cin >> a[i];
    for(i=0;i<s2;i++)
        cin >> b[i];
    for(i=m;i<=n;i++)
    {
        d = del(i);
        nd = ned(i);
        if(d == true && nd == true) ++k;
    }
    cout << k << endl;
    return 0;
}

如您所见,我已将它们全局声明并在del()中使用它们。

但是,这是不好的做法,您应该使用OOP w / structs或类来传递和组织数据。

答案 2 :(得分:-1)

你的声明不是全局的,只需将[25]和b [25]的声明移到main之外。