Не может получить доступ к переменной вне определения конструктора
Я новичок в 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)
{
}
}