Repository 32bit  Forum
Repository 64bit  Wiki

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

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

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

Messaggioda Calzo » dom mag 18, 2008 21:53

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
Ultima modifica di Calzo il dom mag 18, 2008 22:58, modificato 1 volta in totale.
Avatar utente
Calzo
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: sab ott 06, 2007 21:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda d4z_c0nf » dom mag 18, 2008 22:13

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
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

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

Messaggioda phobos3576 » dom mag 18, 2008 22:31

Calzo, come mai stai mischiando C standard con C++?
Non fai prima ad usare la libreria fstream per i file?
Avatar utente
phobos3576
Staff
Staff
 
Messaggi: 2980
Iscritto il: sab apr 16, 2005 23:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

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

Messaggioda m0rdr3d » dom mag 18, 2008 22:47

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);
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

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

Messaggioda Calzo » dom mag 18, 2008 22:53

@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
Avatar utente
Calzo
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: sab ott 06, 2007 21:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda Calzo » dom mag 18, 2008 22:57

m0rdr3d ha scritto:Devi usare l'operatore :: per discriminare il namespace della funzione.


Ecco! perfetto.

Grazie 1000.
Adesso devo "solo" imparare il C++ ;)
bye
Avatar utente
Calzo
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: sab ott 06, 2007 21:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda m0rdr3d » dom mag 18, 2008 23:20

Di liberamente scaricabile in rete c'è il famoso thinking in c++: http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html.
Comunque se fai una ricerca all'interno del forum troverai un sacco di suggerimenti, l'argomento è stato trattato qualche volta.
Buona fortuna!
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

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

Messaggioda alessiodf » lun mag 19, 2008 23:05

stai programmando con Qt? non sembrerebbe.. usalo QFile!! #-o

`assistant` e' la tua bibbia! :thumbright:
Avatar utente
alessiodf
Linux 2.6
Linux 2.6
 
Messaggi: 823
Iscritto il: ven ott 14, 2005 20:04
Località: Roma
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1


Torna a Programmazione

Chi c’è in linea

Visitano il forum: TurnitinBot [Bot] e 3 ospiti