2011-01-25 20 views
17

Skompilowałem ten kod w domu na moim mac w/xcode i nie było provblem. Skompilować go w szkole z g ++ w środowisku Linux i otrzymuję te błędy:'numeric_limits' nie został zadeklarowany w tym zakresie, brak funkcji dopasowującej dla wywołania 'max()'

: „numeric_limits” nie jest członkiem std
: Oczekuje podstawowej wyrażenie przed „>” żeton
: nie pasującej funkcji dla wywołania "max()"

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int GetIntegerInput(int lower, int upper) 
{ 
    int integer = -1; 
    do 
    {  
     cin >> integer; 
     cin.clear(); 
     cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); //errors here 
    }while (integer < lower || integer > upper); 

    return integer;  
} 

Jestem geussing może muszę dołączyć dodatkowy nagłówek. Gdybym zabrać std :: to właśnie daje mi podobny błąd

„numeric_limits” nie został zadeklarowany w tym zakresie

+0

Czy czytając dokumentację dla 'numeric_limits', aby nauczyć się jej używać, nie powiedziałeś, w jakim nagłówku on jest? –

+0

tak, ale to było jakiś czas temu, a następnie niedawno skopiowałem kod z mojego innego projektu, nie zdając sobie z tego sprawy. –

Odpowiedz

44

musisz dołączyć plik nagłówka <limits>, czyli gdzie std::numeric_limits jest zdefiniowana. Twój kompilator Mac'a pomagał ci automatycznie, włączając w to ten plik nagłówkowy; jednak nie powinieneś polegać na tym zachowaniu i jawnie zawierać dowolne pliki nagłówkowe, których potrzebujesz.

+5

Czy istnieje nazwa tej funkcji? Chcę dowiedzieć się, jak to wyłączyć, aby nie naruszać niezależności platformy. – MatrixManAtYrService