Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Programmazione ad oggetti C++

    Salve a tutti!

    sono nuova del forum e soprattutto della programmazione ad oggetti in c++...
    ho letto diverse guide, tra le quali alcune molto interessanti di questo sito, ma ho ancora diversi dubbi...
    premetto che sto lavorando in ambiente linux (ubuntu 10.04) e che sto utilizzando l'IDE Code::Blocks 10.05.
    Allora... vediamo se riesco a farmi capire...
    il problema è questo: ho creato un file Interfaccia_Client.cpp in cui ho definito un metodo che in pratica legge da file e stampa a video il contenuto del file, e poi ho invocato questo metodo nel main, però il metodo funziona soltanto se lo dichiaro come static. se non lo dichiaro come static mi viene visualizzato un messaggio di questo tipo: "multiple definition of..." nome del metodo. Cioè il metodo è corretto, però perchè deve essere dichiarato static? Esiste un altro modo di fare funzionare le cose senza la necessità di dichiarare tale metodo come static?(naturalmente ho incluso nel main il file "Interfaccia_Client.cpp").


    Un altro problema che ho è il seguente:
    ho creato una classe (Mem_Server.h) e ho definito il costruttore per tale classe. Quello che volevo fare era diciamo istanziare un oggetto di tale classe all'interno del metodo di Interfaccia_Client.cpp di cui parlavo prima, ma anche in questo caso, quando compilo mi dà errore, mentre se faccio la stessa cosa nel main è tutto a posto.
    Non riesco a capire quale sia il problema. Molto probabilmente ci sono delle regole sintattiche che non conosco.
    Potreste darmi una mano per piacere?
    Vi ringrazio moltissimo

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Molto probabilmente ci sono delle regole sintattiche che non conosco.
    Togli pure il "molto probabilmente". Il consiglio è di comprare un buon libro oppure se sai l'inglese (in pratica obbligatorio per programmare), puoi scaricarti "Thinking in C++" Volume 1 di Bruce Eckel (è un libro che l'autore ha reso da anni pubblicamente scaricabile).

    Per il resto (e in futuro) è necessario vedere il codice per capire il problema. Una vaga descrizione fa solo confusione.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    (Dico una cazzata) Ma hai istanziato l'oggetto per richiamare il metodo?

    Cioè, hai fatto così:

    codice:
    int main()
    {
        MyClass myObj;
        
        myObj.Metodo();
    }
    o così?

    codice:
    int main()
    {
        MyClass.Metodo();
    }
    La seconda sintassi è quella per la chiamata ad un metodo static, la prima è quella per l'invocazione di un metodo su una particolare istanza di una classe...
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4
    Ciao!
    ho fatto così:
    codice:
    int main()
    {
        MyClass.Metodo();
    }
    credo di aver capito la differenza tra static e non static, correggimi se sbaglio: per richiamare un metodo static nel main è necessario istanziare un oggetto di tale classe, mentre un metodo static, se non ho capito male, appartiene a tutta la classe, e di conseguenza posso richiamarlo senza istanziare un oggetto di quella classe nel main, giusto?

    Sono andata in confusione perchè la mia intenzione era quella di creare una classe che avesse soltanto metodi, e nessun attributo, di conseguenza ho pensato (evidentemente in maniera erronea) che per una classe fatta in questo modo non ci fosse la necessità di istanziare un oggetto della classe nel main per utilizzarne i metodi... però non funzionava finchè appunto non ho dichiarato i metodi "static", cosa che però finora non mi ha permesso di istanziare all'interno di questi metodi oggetti di altre classi... cmq ti ringrazio davvero per la risposta. Buona giornata

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    per richiamare un metodo NON static
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    si certo evidentemente volevo dire NON static, è stata una svista... penso che si capisca dal resto...

  7. #7
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    CIao ... Come ti è stato già consigliato da shodan, dovresti fornire maggiori dettagli riguardo il codice (almeno la parte della dichiarazione e della definizione del metodo in questione) altrimenti difficilmente troverai una soluzione . La stessa cosa per quanto riguarda il secondo problema (qui non hai nemmeno mensionato il messaggio d' errore)...
    PS: Comunque, per essere precisi, un metodo static che non fa riferimento a nessun istanza, viene richiamato così:
    codice:
    ...
    MyClass::Metodo();
    ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da KrOW
    PS: Comunque, per essere precisi, un metodo static che non fa riferimento a nessun istanza, viene richiamato così:
    codice:
    ...
    MyClass::Metodo();
    ...
    Ops... errore mio
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.