2013-04-13 37 views
0

我遇到了一些編程項目的麻煩。我想從.txt文檔獲取信息,並將信息存儲在類對象數組中。對於.txt文檔的每一行,我想要創建一個新的類對象。C++ Ifstream到一個類對象的數組

所以,如果有

「10馬克1988年9月24日客戶經理

9珍妮1983年8月6日發貨助手」

在.TXT

,第一行會存儲在uArray [0]的第一個對象的變量中,第二行存儲在uArray [1]的變量中。

我創建了一個具有五個變量的「用戶」類。

int iD; 
string name, birth, sSN, dept, position; 

這就是我,我知道那是方式,方法關閉,但我無法得到它的權利..

{ 
ifstream myFile; 
users uArray[100]; 

myFile.open("users.txt") 
while(!myFile.eof()) 
    { 
    myFile >> uArray.users.iD >> uArray.users.name >> uArray.users.sSN ...(ect); 
    } 
} 

我應該創建一個函數來調用,將排序信息還是有更簡單的方法嗎?我卡住了...很抱歉,對於初學者的問題...

+0

一個明顯的錯誤是while循環。請參閱[這裏](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)瞭解更多。 – juanchopanza

回答

2

您可以重載operator>>以使其更容易一些。這是操作員超載背後的實際目的。您提供自定義行爲,並且在使用流時完全透明。聲明friend - 函數類

friend std::ifstream& operator>>(std::ifstream&, users& user); 

內實現它

std::ifstream& operator>>(std::ifstream& stream, users& user){ 
    stream >> user.iD >> user.name >> user.sSN ...(ect) 
    return stream; 
}  

然後,您可以使用一個for循環,做如同上面一樣。但是,你必須使用數組索引到數組

int i = 0; 
while(!myFile.eof()) 
{ 
    myFile >> uArray[i].users.iD >> uArray[i].users.name >> 
    uArray[i].users.sSN ...(ect); 
    i++; 
} 

here的教程內處理單一元素。

+0

只要成員的訪問權限是公開的,就沒有必要使它成爲朋友功能。如果您將它聲明爲朋友函數,那麼該聲明必須位於類內部而不是它自己的位置(位於命名空間範圍內)。 –

+0

謝謝你的提示,但是如果你仔細閱讀我的帖子,我說它必須在課堂上聲明。 –

+0

的確,我忽略了這一點,對於噪音感到抱歉。 –

0

你需要的東西更接近這個,你在哪裏索引到數組:

ifstream myFile; 
users uArray[100]; 

myFile.open("users.txt") 
i=0; 
while(!myFile.eof()) 
{ 
    myFile >> uArray[i].iD >> uArray[i].name >> uArray[i].sSN ...(ect); 
    i++; 
} 
0

你不訪問的元素uArray正確。由於這是(在你的榜樣尺寸100的)一個數組,你需要指定你想將數據加載到哪個數組元素,如

uArray[i].users.iD 

一個解決問題的方法是具有的選擇增加,每一個變量記錄在您的文件:

int index = 0; 
while (!myFile.eof() && index < 100) { 
    myFile >> uArray[index].users.iD >> ...; 
    index++; 
} 

順便說一句,你會得到加分,如果你給了「100」值的名稱(或者作爲#define或爲const int),並使用該值來比較index反對。

相關問題