2011-06-09 64 views
2

我想從項目中的文件導入數據,但我無法找到EOF。首先,我使用EOF函數作爲條件,但我在閱讀this後,試圖更改代碼,但仍然給出相同的錯誤。請幫助我。 感謝使用EOF函數作爲條件

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 
class Rooms; 
class Guest; 
class MeetingRoomGuest; 
Rooms* r_ptr[999]; 
int r_count=0; 

ofstream infile("new.txt",ofstream::binary); 
while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
{ 
    r_count++; 
} 
infile.close(); 
int main() 
{ 
    // some code here 
    return 0; 
} 

錯誤:

error C2059: syntax error : 'while'

UPDATE: 請讓我知道這是一個更好的實現得益於

int main() 
{ 
    r_ptr[r_count]= new Rooms; 
    while(infile.read((&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_ptr[++r_count]= new Rooms; 
     r_count++; 
    } 
    infile.close(); 
    //some code here 
} 

我仍然得到錯誤,

錯誤:

error C2039: 'read' : is not a member of 'std::basic_ofstream<_Elem,_Traits>'

UPDATE: 非常感謝。這些代碼已經最終確定,這裏是最後的實施,

int main() 
{ 
    r_ptr[r_count]= new Rooms; 
    while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_count++; 
     r_ptr[r_count]= new Rooms; 

    } 
    infile.close(); 
    // some work 
} 
+1

在經過語法和編譯問題之後,出現了一個嚴重的設計問題:試圖讀取或寫入原始指針爲'char []'將永遠不會做你想要的。閱讀關於序列化。 – aschepler 2011-06-09 11:35:31

+0

@ aschepler,哦!對不起,我幾乎忘了爲他們分配內存。 Thankyou :) – 2011-06-09 11:37:24

+0

你正在循環中增加r_count一次或多次。嘗試 - r_ptr [r_count] =新房間;和這一行r_ptr [r_count] = new Rooms;在不需要while循環之前 – daven11 2011-06-09 11:47:19

回答

3

看來你有一個或兩個語法問題時:

  1. 你已經得到了函數或main(while和infile命令)之外的代碼,它們需要放入main或者函數中。

  2. 你的第二個,同時需要一個dodo{....}while(1),也是它一直運行

  3. 你的所有變量的main之外定義。這使得他們的全局變量,要避免的事情儘可能他們應該移動內部main以及

  4. ofstream用於輸出到一個文件,你想有一個ifstream從文件中獲取輸入

+0

謝謝。但我仍然得到一個錯誤,我如何將一個雙指針轉換爲一個字符指針?:'std :: basic_istream <_Elem,_Traits> :: read':無法將參數1從'房間**'轉換爲'char *' – 2011-06-09 12:00:52

+0

這是因爲'(char *)(&r_ptr [r_count])'告訴程序將r_ptr(一個房間*)改成一個char *,並不知道該怎麼做。 直接向/從文件讀取和寫入類通常是一個壞主意。如果你真的必須然後@aschepler是正確的 - 谷歌序列化 – Phil 2011-06-09 12:17:08

3

你不能讓外面主

int main() 
{ 
    ofstream infile("new.txt",ofstream::binary); 
    while(infile.read((char *)(&r_ptr[r_count]),sizeof(Rooms))) 
    { 
     r_count++; 
    } 
    infile.close(); 

    // some code here 
    return 0; 
} 
+0

謝謝。你的回答非常有幫助。 – 2011-06-09 12:24:00