2013-07-07 45 views
0

我目前正在用C++编写一个程序,该程序从.txt文件获取信息并动态分配以便稍后参考。信息格式(名字姓氏)(工资)(扣除额)(%奖金)。我创建了一个头文件结构是如下:与变量范围的错误

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

我的问题是,当我呼吁在一个由主函数调用的函数变量,编译器给我一个错误的说法变量“超出范围”。我的印象是,因为我在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; 
    } 
+2

哇你需要一个'int'在这之前'main()'! – ChiefTwoPencils

+0

提示:切勿使用'new'。在这种情况下,智能指针会做同样的事情,但更好。当然,如果你能提供帮助,甚至不会使用动态分配。没有指针,显示的代码仍然有效。 – chris

+0

确保在新建PayrollInfo时初始化下一个指针。否则,你会在那里发生垃圾,这从来没有好玩的调试。 –

回答

0

不幸的是,因为我是一个新用户,我不能发表评论,否则我就......但有一件事我与你的代码发现这是一个有点奇怪,我真的不能告诉太多更关于没有看到你的主要功能的其余部分,那就是你试图使用变量的第一个,最后一个,薪水,奖金和演绎,就好像他们是全局变量,当他们似乎没有被定义为你的任何其他地方程序。

如果你的Open()函数是为了定义这些变量,如果你想在它的作用域之外使用它们,就需要在它的作用域外使用它们 - 事先声明它们然后修改你的Open()函数接受对它们的引用作为参数,然后以这种方式修改它们,可以产生你正在寻找的结果。但事实是,您还没有在我看到的任何地方声明这些变量,并且如果它们是在Open()中声明的,那么您有问题。

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