Domanda

Mentre, la compilazione di un pacchetto, scritto in C ++ su RHEL 5.0. Sto ottenendo il seguente errore.

> errore: nocreate non è un utente di std::ios

Il codice sorgente corrisponde a:

  

ifstream tempStr (argv[4], ios::in | ios::nocreate);


Ho cercato

  

# g ++ -O -Wno-deprecato -o

così come:

  

# g ++ -o -O

Si prega di suggerire una soluzione.

È stato utile?

Soluzione

ios::nocreate non fa parte dello standard C ++ -? Cosa si aspetta che faccia

Modifica: Dal punto di Google, sembra che si intendeva impedire che il file che viene creato se non esiste già. Questa è l'impostazione predefinita per ifstreams comunque, quindi si può solo dire:

ifstream f( filename );
if ( ! f.is_open() ) {
    // open failed - probably because infput file does not exist  
}

Altri suggerimenti

L'apertura di un file in modalità di lettura (ios::in) non crearlo se non esiste. Si può solo lasciare fuori la nocreate non standard. E poiché in è l'impostazione predefinita per ifstream:

ifstream tempStr (argv[4]);

È possibile aprire il file come un filehandle utilizzando fopen e O_CREAT | O_EXCL e quindi convertirlo in un flusso utilizzando

__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
    ostream os(&filebuf);

questo utilizza un'estensione non standard definito. Se qualcuno ha una soluzione migliore, voglio davvero sapere!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top