2014-02-19 4 views
1

Я новичок в 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», которые я хочу использовать в основной функции, но их область действия ограничена только определением конструктора. ** Есть ли у них какой-либо способ сделать объем «данных []», который из типа узла и «сохраняется» в основной функции?

ответ

1

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

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

Наверное, самый простой способ, чтобы добавить их в свой класс (так же, как 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) 
    { 
    } 
} 
+0

Thnaks за ответ, не могли бы вы мольбу разделите мне часть кода, объясняющую немного (я не запрашиваю полный код, но просто тело), ​​чтобы понять, потому что я все еще не способен понять. Фактически я обязан прочитать файл «Input.txt» (принятый как единственный аргумент, который содержит символы для вычисления частоты) только внутри определения конструктора. – Sss

+0

Фактически я должен прочитать символ и рассчитать частоту только внутри определения конструктора, но прочитанный символ и claculated частота должны обладать областью в main(). Я хочу, чтобы часть кода помогла сделать это (я сделаю это как refernce), Thnaks – Sss

+0

на самом деле - data [] уже является публичным членом вашего класса, так что, похоже, у вас это уже есть. Вы можете читать/писать с помощью, например, Object1.data [0] в вашей основной функции –

Смежные вопросы