Глобальные переменные в C ++ - PullRequest
0 голосов
/ 24 января 2010

Я должен написать программу, которая должна читать входные числа в части 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] <- это переменные, которые мне нужно видеть другими функциями (потому что я использую их, как вы можете видеть). </p>

Я пытался объявить их как глобальные, но это не сработало, я получил ошибки типа «не было объявлено в этой области».

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 24 января 2010

Делать переменные глобальными по этой причине - плохая привычка. Либо просто передавайте массивы в функции, либо превращайте все это в объект и делайте массивы и функции членами класса. Вот что такое ООП.

0 голосов
/ 24 января 2010

То, что вам нужно, это просто поместить переменные в глобальную область видимости.Я не знаю, что вы имеете в виду об ошибках «не объявлено в этой области», потому что следующее прекрасно работает:

#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().

Однако это плохая практика, и вам следует использовать ООП с структурами или классами для передачи и организации ваших данных.

0 голосов
/ 24 января 2010

Ваши объявления не являются глобальными, просто переместите объявления для a [25] и b [25] за пределы main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...