2011-01-25 8 views
17

Ho compilato questo codice a casa sul mio mac w/xcode e non ci sono state prove. Compilo a scuola con g ++ su Linux e ottengo questi errori:'numeric_limits' non è stato dichiarato in questo ambito, nessuna funzione di corrispondenza per la chiamata a 'max()'

: 'numeric_limits' non è membro di std
: atteso primaria espressione prima di '>' token
: nessuna funzione di corrispondenza per la chiamata al '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;  
} 

Sono geussing forse devo includere un'intestazione extra. Se mi togli lo std :: appena mi dà un errore simile

‘numeric_limits’ non è stato dichiarato in questo ambito

+0

Quando leggi la documentazione di 'numeric_limits' per imparare come usarlo, non ti dice in quale intestazione si trova? –

+0

sì, ma è passato un po 'di tempo, e solo di recente ho copiato il codice del mio altro progetto senza rendermene conto. –

risposta

44

È necessario includere il file di intestazione <limits>, che è dove std::numeric_limits è definito. Il tuo compilatore Mac ti stava aiutando includendo automaticamente quel file di intestazione; tuttavia, non dovresti fare affidamento su questo comportamento e includere esplicitamente qualsiasi file di intestazione di cui hai bisogno.

+5

Esiste un nome per questa funzione? Voglio capire come disabilitarlo in modo da non rompere l'indipendenza dalla piattaforma. – MatrixManAtYrService