Не может получить доступ к переменной вне определения конструктора

Я новичок в C++ и сталкиваюсь с проблемой, что у меня такая ситуация: у меня есть класс Хаффмана, как это:

class HuffmanTree 
{
    public: int size,length;
    Huffman(char * argv) ; // please see it's definition below, in it's defintion i read the frequency from a file (Input.txt) which taken as sole argument (which conatains some alphabets like "aaabbaacccab" to calculate frequency).
~HuffmanTree () {};

struct Node 
{
    int value, Front, Rear;
    short flag;
    unsigned char symbol;
    int left, right;
};

Node * tree;
Node data[1000];
};
n = sym.size() - 1;

//here is the main function 
int main(int argc, char *
* argv) 

{
    int freq[256] = { 0 };
     HuffmanTree Object1(argv[1]);
     cout<<"check"<<storesym.size()<<endl;
     Object1.read( &Object1.tree, sym.size() - 1, Object1.data, Object1);
     return (0);
}

Пожалуйста, не углубляйтесь в код, потому что мой вопрос очень прост и заключается в следующем: ** В моем конструкторе у меня есть переменные и массивы, такие как "data[]","storesym", которые я хочу использовать в основной функции, но их область действия ограничивается только определением конструктора. ** Есть ли какой-нибудь способ сделать область видимости "data []" типом узла и "storeym" в основной функции?

1 ответ

Решение

Несколько разных подходов:

  • Сохраните их как члены данных в классе, доступные через объект (например, как data_size в вашем примере - или лучше использовать приватный член данных с общедоступными методами получения / установки)
  • Создайте их вне конструктора и передайте их как ссылки
  • Создайте их как глобальные переменные (доступные из main и класса, но считающиеся плохим стилем)

Вероятно, самый простой способ - добавить их в ваш класс (так же, как data_size). Какие бы типы данных вам ни понадобились, сначала добавьте их в определение класса:

class Huffman 
{
    public: 
        int data_size;
        boolean my_flag;
        int my_value;
        Node my_array[20];
}

затем присвойте им правильные значения в конструкторе

Huffman::Huffman(char *  argv)
{
    //e.g.
    my_flag = true;
}

затем прочитайте / запишите их из Main через объект:

int main(int argc, char * * argv) 
{
    //...
    if(Object1.my_flag)
    {
    }
}
Другие вопросы по тегам