无法访问构造函数定义之外的变量

时间:2014-02-19 16:57:43

标签: c++ algorithm oop huffman-code

我是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”,我想在main函数中使用,但它们的范围仅限于Constructor定义。 **他们是否可以将“data []”的范围作为主要功能中的节点类型和“storeym”的范围?

1 个答案:

答案 0 :(得分:1)

一些不同的方法:

  • 将它们作为数据成员存储在类中,可以通过对象访问(例如,像示例中的data_size一样 - 或者更好的样式是数据成员是公共getter / setter方法的私有)
  • 在构造函数外部创建它们并将它们作为引用传递
  • 将它们创建为全局变量(可从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)
    {
    }
}