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:
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
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!!
`assistant` e' la tua bibbia!
