簡體   English   中英

C ++中的全局變量

[英]Global variables in C++

我應該寫一個程序,該程序應該從main()部分的輸入數字中讀取,然后在其他布爾函數中進行一些計算。 我不想每次調用它們時都將整個數字數組和所有其他參數插入函數中。

我的問題是:我可以在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] <-這些是我需要其他功能看到的變量(因為您可以看到它們,因為我使用了它們)。

我嘗試將它們聲明為global,但是那行不通,出現了諸如“未在此范圍內聲明”之類的錯誤。

感謝您的幫助。

因此,使變量全局化是一個壞習慣。 要么將數組傳遞給函數,要么將整個對象變成一個對象,並使數組和函數成為類的成員。 這就是OOP的目的。

您要找的只是將變量放入全局范圍。 我不知道您對“未在此范圍內聲明”錯誤的意思,因為以下方法可以正常工作:

#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來傳遞和組織數據。

您的聲明不是全局聲明,只需將a [25]和b [25]的聲明移到main之外即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM