变量范围错误

时间:2013-07-07 02:55:48

标签: c++ scope dynamic-memory-allocation

我目前正在用C ++编写一个程序,该程序从.txt文件中获取信息并动态分配它以便稍后引用。信息格式为(名字姓氏)(工资)(扣除额)(%奖金)。我在头文件中创建了一个结构,如下所示:

    struct PayrollInfo
    {
        string first, last;
        float salary, deduction, bonus;
        PayrollInfo *next;
    };

我的问题是,当我调用main函数调用的函数中的变量时,编译器会给出一个错误,指出变量“超出范围”。我的印象是因为我在main函数中声明了结构指针,这些结构指针将继承到调用的函数。我该怎么做才能解决这个问题?我在下面提供了我的代码。 Open是一个我打开文件的函数,如果它存在则返回0等。另外,我是新手使用动态内存分配,所以如果我的Read()函数有任何可见的错误,请告诉我!

    main()
    {
         PayrollInfo *head, *tail, *newp, *tmp;
         head = tail = newp = tmp = NULL;

         while(newp = Read() )
         .
         .
         .

    PayrollInfo *Read()
    {
         PayrollInfo *tmp = NULL;
         if (Open() == 0)
         {
              tmp = new PayrollInfo;
              tmp->first = first;
              tmp->last = last;
              tmp->salary = salary;
              tmp->bonus = bonus;
              tmp->deduction = deduction;
         }
         else
              return NULL;
         return tmp;
    }

1 个答案:

答案 0 :(得分:0)

不幸的是,由于我是新用户,我无法发表评论,或者我会...但是有一件事我注意到你的代码有点奇怪,我不能真正讲得太多,没有看到您的主要功能的其余部分,那就是您尝试使用变量first,last,salary,bonus和deduction,就好像它们是全局变量,当它们在程序中的任何其他地方看起来没有被定义时。

如果您的Open()函数用于定义这些变量,如果您想在其范围之外使用它们,则需要在其范围之外执行此操作 - 事先声明它们然后将Open()函数修改为接受对它们的引用作为参数,然后以这种方式修改它们,可以产生你正在寻找的结果。但事实上,你没有在我能看到的任何地方声明任何变量,如果它们在Open()中声明,那么你就会遇到问题。

发布您的Open()函数的代码以及main()函数之前的所有内容(包括变量定义等),也许问题会更明显。