2013-05-14 13 views
13

Jest to część kodu z błędem:Brak funkcji dopasowywania - ifstream open()

std::vector<int> loadNumbersFromFile(std::string name) 
{ 
    std::vector<int> numbers; 

    std::ifstream file; 
    file.open(name); // the error is here 
    if(!file) { 
     std::cout << "\nError\n\n"; 
     exit(EXIT_FAILURE); 
    } 

    int current; 
    while(file >> current) { 
     numbers.push_back(current); 
     file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 
    return numbers; 
} 

I dobrze, ja niby mam pojęcia, co się dzieje. Całość kompiluje się poprawnie w VS. Jednak muszę skompilować to z dev cpp.

Skomentowałem błędy wyrzucania linii w powyższym kodzie. Błędy są:

nie pasującej funkcji dla wywołania 'std :: basic_ifstream :: open (std :: string &)
nie pasującej funkcji dla call' std :: basic_ofstream :: open (std :: string &)


w różnych częściach kodu pojawiają się błędy jak „numeric_limits nie jest członkiem STD” lub "max() nie został ogłoszony, choć występują one w klasie iostream i wszystko działa w VS.


Dlaczego pojawia się ten błąd?

+0

Czy masz odpowiednie obejmuje? Masz twoje dołączenie i zawierają ? – RandyGaul

+0

Tak, oczywiście robię – user2252786

+0

Nie obrażaj się, to jest zwykle dokładny powód :) – RandyGaul

Odpowiedz

31

Zmiana:

file.open(name.c_str()); 

lub po prostu użyć konstruktora, gdyż nie ma powodu, aby oddzielić konstrukcja i otwarte:

std::ifstream file(name.c_str()); 

Wsparcie std::string argument dodano w C++ 11.

Jako loadNumbersFromFile() nie modyfikuje przekazywania swojego argumentu przez std::string const& w celu udokumentowania tego faktu i uniknięcia niepotrzebnej kopii.

+0

Dzięki, działa teraz. – user2252786

Powiązane problemy