Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]Classe Dati e copia

    ciao.
    Ho predisposto una classe per leggere e scrivere i dati in una classe "blocchetto" di dati CSubMeshData che contiene dati geometrici x,y,z,normale ec..
    Adesso vorrei aggiungere la funzionalità di copia a questo blocchetto , per creare altri blocchetti di dati copiati.
    Come è meglio predisporre alla copia la classe?
    Bisogna usare il costruttore di copia?
    come?

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Il metodo non conta, l'importante è che ti ricordi di copiare tutto, inizializzare eventuali puntatori...

    Fai un costruttore di copia, un metodo clone, un overload dell'operatore =...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    per esempio:
    voglio copiare due vector di una classe CSubMeshData:

    codice:
    CSubMeshData* CSubMeshData::operator=(const CSubMeshData* data) 
    {
    	CSubMeshData* pData = new CSubMeshData();
    	pData->m_VertexBuffer = data->m_VertexBuffer;
    	return pData;
    }
    non riesco a capire come copiare due vector su due classi con l'operatore = .
    In pratica vorrei che

    codice:
    CSubMeshData* pData;
    CSubMeshData* pDataBis;
    pData.load(xxxx);//carico i dati
    
    pDataBis = pData;// copio il vector dalla classe pData in pDataBis
    mi baso sul fatto che ho letto che l'operatore = tra due vector fa la copia del vector , è giusto?

    non capisco.
    ciao.

  4. #4
    Prova così:
    codice:
    CSubMeshData &CSubMeshData::operator=(const CSubMeshData &data) 
    {
    	this->m_VertexBuffer = data.m_VertexBuffer;
    	return *this;
    }
    ...
    {
    
    CSubMeshData aData;
    CSubMeshData aDataBis;
    aData.load(xxxx);//carico i dati
    
    aDataBis = aData;// copio il vector dalla classe aData in aDataBis; il valore restituito da = viene ignorato
    MyFunc (aDataBis = aData); //copio il vector dalla classe aData in aDataBis; qui il valore restituito da = viene passato come parametro a MyFunc
    }
    ;-)

    EDIT: attento a non farti confondere dal valore (che in questo caso e' un riferimento a aDataBis) restituito da =. Nel primo esempio tale riferimento a aDataBis viene ignorato, nel secondo viene passato come argomento alla funzione MyFunc.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie.
    Ho un altro problema : ho inserito nella mia classe CSubMeshData una funzione pubblica che ritorna il vector , questo è il codice :

    codice:
    CSubMeshData& CSubMeshData::operator=(const CSubMeshData &data) {
    
    	this->m_VertexBuffer = data.GetVectorVertexes();
    	return *this;
    
    }
    e questa è la funzione:
    std::vector<tagPositionXYZ*> CSubMeshData::GetVectorVertexes()
    {
    	return m_VertexBuffer;
    }
    mi da quest errore:
    Errore 1 error C2662: 'CSubMeshData::GetVectorVertexes' : cannot convert 'this' pointer from 'const CSubMeshData' to 'CSubMeshData &' c:\programmazione\d3dxcreatemeshfvf\emptyproject10 \submeshdata.cpp 272

    non sono riuscito a capire il perchè .


    ciao

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Prova con:
    codice:
    CSubMeshData& CSubMeshData::operator=(const CSubMeshData &data) {
    
    	this->m_VertexBuffer = data.m_VertexBuffer;
    	return *this;
    
    }
    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.

  7. #7
    Originariamente inviato da giuseppe500

    mi da quest errore:
    Errore 1 error C2662: 'CSubMeshData::GetVectorVertexes' : cannot convert 'this' pointer from 'const CSubMeshData' to 'CSubMeshData &' c:\programmazione\d3dxcreatemeshfvf\emptyproject10 \submeshdata.cpp 272

    non sono riuscito a capire il perchè .


    ciao
    Chiami un metodo non const da un oggetto const (il riferimento costante argomento dell'operatore d'assegnamento), e la cosa non è consentita.

    Modifica il tuo metodo da non const a const:
    codice:
    std::vector<tagPositionXYZ*> CSubMeshData::GetVectorVertexes() const
    {
    	return m_VertexBuffer;
    }
    chiaramente devi modificare di conseguensa anche la sua dichiarazione:
    codice:
    class CSubMeshData{
    ...
    std::vector<tagPositionXYZ*> GetVectorVertexes() const;
    ...
    };
    Dato che ci sei potresti anche definire il seguente metodo:
    codice:
    const std::vector<tagPositionXYZ*> & CSubMeshData::GetVectorVertexesConstRef() const{
    	return m_VertexBuffer;
    }
    ed usarlo nell'assegnamento:
    codice:
    CSubMeshData& CSubMeshData::operator=(const CSubMeshData &data) {
    	this->m_VertexBuffer = data.GetVectorVertexesConstRef();
    	return *this;
    }
    Dato che ci sei fai anche un bel typedef:
    codice:
    typedef std::vector<tagPositionXYZ*> TagPositionXYZPtrContainer;
    ;-)

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.