Pagina 1 di 1

[Qt/C++] close() Vs this->close() [RISOLTO]

Inviato: dom 18 mag 2008, 22:53
da Calzo
Ciao a tutti.
Sto scrivendo un programma in QT 3.3.8 e mi sono imbattuto in un problema relativo alla chiusura di un file.

La funzione incriminata apre o chiude un file (un device file nello specifico) cliccando sullo stesso pulsante. Il codice (epurato delle parti che non servono) è il seguente:

Codice: Seleziona tutto

if(fd==0) //controllo se ho già aperto un altro file
{
	fd=open(lineEdit->text(), O_RDONLY );
	if(fd>0)
	{
	    cout << "DONE [" << fd << "]\n";
	    BOpen->setText("Close");
	}
	else
	{
	    cout << "FAILED [" << fd << "]\n";
	    fd=0;
	}
} else
{
   cout << "Close [" << fd << "]...\n";
   close(fd);  // <== QUI CRASHA!!
   fd=0;
}
Il programma crasha quando chiude il device (/dev/random per la cronaca). Se non ho capito male, la funzione close che viene invocata e che fa crashare il programma non è quella che serve a me (ossia quella definita in unistd.h), ma è la this->close(). Passandogli il parametro fd crasha.

La domanda quindi è: come faccio ad usare la funzione close() definita in unistd.h al posto di this->close()?
Non so se ho spiegato bene il problema.

Grazie

Re: [Qt/C++] close() Vs this->close()

Inviato: dom 18 mag 2008, 23:13
da d4z_c0nf
Calzo ha scritto:Ciao a tutti.
Sto scrivendo un programma in QT 3.3.8 e mi sono imbattuto in un problema relativo alla chiusura di un file.

La funzione incriminata apre o chiude un file (un device file nello specifico) cliccando sullo stesso pulsante. Il codice (epurato delle parti che non servono) è il seguente:

Codice: Seleziona tutto

if(fd==0) //controllo se ho già aperto un altro file
{
	fd=open(lineEdit->text(), O_RDONLY );
	if(fd>0)
	{
	    cout << "DONE [" << fd << "]\n";
	    BOpen->setText("Close");
	}
	else
	{
	    cout << "FAILED [" << fd << "]\n";
	    fd=0;
	}
} else
{
   cout << "Close [" << fd << "]...\n";
   close(fd);  // <== QUI CRASHA!!
   fd=0;
}
Il programma crasha quando chiude il device (/dev/random per la cronaca). Se non ho capito male, la funzione close che viene invocata e che fa crashare il programma non è quella che serve a me (ossia quella definita in unistd.h), ma è la this->close(). Passandogli il parametro fd crasha.

La domanda quindi è: come faccio ad usare la funzione close() definita in unistd.h al posto di this->close()?
Non so se ho spiegato bene il problema.

Grazie
Non so se ho capito bene il problema ;).
In sostanza stai dicendo che la classe di cui fa parte questo pezzo di codice ha una funzione close che fa un'ovverride della funzione close della lib unistd.h, e quindi viene invocata quella e non quella della libreria?

rock

Re: [Qt/C++] close() Vs this->close()

Inviato: dom 18 mag 2008, 23:31
da phobos3576
Calzo, come mai stai mischiando C standard con C++?
Non fai prima ad usare la libreria fstream per i file?

Re: [Qt/C++] close() Vs this->close()

Inviato: dom 18 mag 2008, 23:47
da m0rdr3d
Devi usare l'operatore :: per discriminare il namespace della funzione.
L'operatore :: può essere chiamato anche senza un namespace, in questo modo riesci a chiamare una funzione definita al di fuori della classe, anche se ha lo stesso nome.

Quindi la chiamata dovrebbe essere:

Codice: Seleziona tutto

::close(fd);

Re: [Qt/C++] close() Vs this->close()

Inviato: dom 18 mag 2008, 23:53
da Calzo
@d4z_c0nf: si hai capito bene :)

@phobos3576:
phobos3576 ha scritto:Calzo, come mai stai mischiando C standard con C++?
Non fai prima ad usare la libreria fstream per i file?
Sì se io sapessi di cosa stai parlando :lol:
Io non ho praticamente mai programmato in C++, ma ora sono obbligato dalle QT (e poi diciamolo: è ora che io impari!), quindi per alcune operazioni mi basavo sul C (e credevo anche di fare la cosa giusta).

Però il problema rimane: se ho una funzion esterna ad una classe e una funzione con lo stesso nome all'interno della classe, come faccio a discriminare l'uso di una e dell'altra?

...e gia che ci siamo: sapete indicarmi della documentazione decente per il C++? io stavo seguendo un libro, ma a parte le classi non mi spiega molto di più :( per esempio non conosco le librerie per il C++ (a parte iostream.h)

grazie

Re: [Qt/C++] close() Vs this->close() [RISOLTO]

Inviato: dom 18 mag 2008, 23:57
da Calzo
m0rdr3d ha scritto:Devi usare l'operatore :: per discriminare il namespace della funzione.
Ecco! perfetto.

Grazie 1000.
Adesso devo "solo" imparare il C++ ;)
bye

Re: [Qt/C++] close() Vs this->close() [RISOLTO]

Inviato: lun 19 mag 2008, 0:20
da m0rdr3d
Di liberamente scaricabile in rete c'è il famoso thinking in c++: http://www.mindview.net/Books/TICPP/Thi ... CPP2e.html.
Comunque se fai una ricerca all'interno del forum troverai un sacco di suggerimenti, l'argomento è stato trattato qualche volta.
Buona fortuna!

Re: [Qt/C++] close() Vs this->close() [RISOLTO]

Inviato: mar 20 mag 2008, 0:05
da alessiodf
stai programmando con Qt? non sembrerebbe.. usalo QFile!! #-o

`assistant` e' la tua bibbia! :thumbright: