2013-07-07 55 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()函數(包括變量定義等)之前的所有內容,也許問題會更加明顯。