2014-12-04 95 views
0

這似乎很奇怪。我的代碼片段如下:雖然(file_object)造成無限循環

List(const char* fn) { 
    std::ifstream file(fn); 

    if (!file){ 
     throw std::string("*** Failed to open file ") + std::string(fn) + std::string(" ***"); 
    } 
    while (file) { 
     T e; 
     if (e.load(file)){ 
      list.push_back(*new T(e)); 
     } 
    } 
} 

與其他人,似乎在整個文件就好運行。但對我而言,我在我的機器上陷入了無限循環。

OS X - G ++ 4.2

我不知道,爲什麼有此功能的差異。

這裏是無限循環:由於文件是在一個有效的狀態下放置

while (file) { 
    T e; 
    if (e.load(file)){ 
     list.push_back(*new T(e)); 
    } 
} 
+1

假設'e.load(file)'每次都會使文件處於有效狀態,當您希望它在文件末尾留下'eof'或其他一些條件時。我無法猜測它可能會做什麼。 – 2014-12-04 19:53:26

+0

什麼是T'配對... – 2014-12-04 19:54:07

+0

T是一個模板變量,很抱歉。是的,我會這樣認爲,但特別是在我的機器上失敗似乎很奇怪。 – Kris 2014-12-04 19:55:35

回答

2

while(file)將返回true,只要。

您還沒有告訴我們T是什麼或其load方法的用途,因此我們無法給您提供比這更多的信息。您需要確保load方法要麼關閉文件描述符,要麼保留eof狀態或其他類似的東西。

+0

這不是你正在談論的文件描述符。 – 2014-12-04 19:56:16

+0

問題確實在load()函數中。它正在使文件處於有效狀態-_-。非常感謝你,我的好先生! – Kris 2014-12-04 19:58:50

+0

或文件...! – 2014-12-04 20:02:58