2016-03-28 25 views
2

ifstream kullanarak bir dosyayı okumaya çalışıyorum. Aşağıdaki hataya geldim: Vector subscript aralık dışı Bu, açılan dosyanın kapanış deyimine ulaşana kadar olur, onu kaldırmak bir istisna neden olmaz.Vektör altyazısı, ifstream kapandıktan sonra aralık dışındadır

#include <fstream> 
#include <algorithm> 
#include <vector> 
#include <string> 
#include <iterator> 
#include <sstream> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    ifstream ifile("myswearwords.txt"); 

    if (!ifile.is_open()) 
    { 
     cerr << "File not found!\n"; 
     return false; 
    } 

    std::vector<std::string> myswearswords; 
    std::copy(std::istream_iterator<std::string>(ifile), 
     std::istream_iterator<std::string>(), 
     std::back_inserter(myswearswords)); 

// ifile.close(); -> exception rased, when I reach th ebrakpoint at this point 

/// do further work 
return 0; 
} 

kimse burada bana hata açıklayabilir misiniz: İşte bazı örnek kod?

+1

doest:

arada, sonradan myswearswords içine kopyalayarak daha vector yapıcı rater kullanarak kod geliştirmek olabilir? Int main() 'dan sonra 'unuttun. Eklendiğinde, ve 'ifile.close()' uncommented, benim durumumda istisna atılır (myswardwords.txt bazı rasgele metin eklendi) C++ 14 etkin GCC 4.9.3 kullanıyorum. DÜZENLEME: Ayrıca, iostream' içermiyorsunuz ama 'std :: cerr' kullanmıyorsunuz. Kodun kırılabileceğinden emin değil (derlenememeyi bekliyorum) – xinaiz

cevap

0

Yayınladığınız kod bazı derleme zamanı sorunları vardır:

  1. You do not You int main()
  2. Sen beyan yok hemen sonra açık bir küme ayracı yok #include <iostream>
  3. http://ideone.com/mzOyE2

    : bütün bunlarla ifstream ifile

kod iyi çalışır düzeltilmiş

Veriler myswearswords'a kopyalandıktan sonra ifile ve myswearswords arasında korunmuş bir bağlantı yoktur. Yani bu hatayı görmemelisiniz.

Şimdi açıkçası, derleyebilmeniz bile, gerçek kodunuzu bize göstermediniz. Asıl hata, muhtemelen kodun gösterilmemiş bölümünde olabilir. Bu bile derlemek

const vector<string> myswearswords{ istream_iterator<string>(ifile), istream_iterator<string>() };