Repository 32bit  Forum
Repository 64bit  Wiki

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

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 22: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 23:58, modificato 1 volta in totale.
Avatar utente
Calzo
Linux 2.0
Linux 2.0
 
Messaggi: 112
Iscritto il: sab ott 06, 2007 22:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda d4z_c0nf » dom mag 18, 2008 23: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: 1266
Iscritto il: mar mar 14, 2006 19:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: current64
Kernel: 3.2.13
Desktop: awesome 3.4.11

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

Messaggioda phobos3576 » dom mag 18, 2008 23: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: dom apr 17, 2005 0: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 23: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 14: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 23: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 22:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda Calzo » dom mag 18, 2008 23: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 22:21
Località: MN
Slackware: 10.2 | 13
Desktop: Fluxbox | KDE

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

Messaggioda m0rdr3d » lun mag 19, 2008 0: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 14:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

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

Messaggioda alessiodf » mar mag 20, 2008 0: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 21:04
Località: Roma
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti