Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]funzione e parametro ritornato

    Ciao.
    Ho una funzione del tipo:
    codice:
    void setPar(CClassType* par)
    codice:
    void CClass::setPar(CClassType* par)
    {
    *par->bCaricato=true;
    }
    da dove chiamo la funzione cosi:

    codice:
    CClassType par;
    setPar(&par)//passo l'indrizzo

    il campo bCaricato viene riempito con un valore true.

    Ora,Io adesso ho questo codice:

    CClassType* par;
    e devo chiamare la funzione:

    codice:
    CClassType* par;
    setPar(&par)//passo l'indrizzo
    devo avere una funzione cosi'?

    codice:
    void CClass::setPar(CClassType** par)
    {
    **par->bCaricato=true;
    }
    è sbagliato?
    c'è un modo migliore per risolvere?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    codice:
    CClassType* par;
    setPar(par)//passo direttamente il puntatore
    La funzione resta così:

    codice:
    void CClass::setPar(CClassType* par)
    {
      par->bCaricato=true;  //*par->bCaricato=true; non va bene.. par è già un puntatore
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    posto il codice:
    questa è la classe in cui trovo n array m_tagsLoadData
    codice:
    class CSapLoadType 
    {
    	
    public:
    	CSapLoadType();
    	virtual ~CSapLoadType();
    	tagLoadData* getByID(int ID);
    	void SetTagsLoadData(CTypedPtrArray<CPtrArray, tagLoadData*> &src);
    	void RemoveTagLoadData(int iPos);
    	void Sort();
    	int Count();
    private:
    	CTypedPtrArray<CPtrArray, tagLoadData*> m_TagsLoadData;};
    
    IMPL:
    CSapLoadType::CSapLoadType()
    {
    }
    
    CSapLoadType::~CSapLoadType()
    {
    	for(int i = 0; i < m_TagsLoadData.GetSize(); i++)
    		delete m_TagsLoadData[i];
    	m_TagsLoadData.RemoveAll();
    	CTypedPtrArray<CPtrArray, tagLoadData*> m_TagsLoadData;
    }
    
    tagLoadData* CSapLoadType::getByID(int ID)
    {
    	if(m_TagsLoadData.GetCount() <= ID)
    		return NULL;
    	tagLoadData* LoadData = m_TagsLoadData[ID];
    	return LoadData;
    }
    
    void CSapLoadType::RemoveTagLoadData(int iPos)
    {
    	m_TagsLoadData.RemoveAt(iPos);
    }
    
    void CSapLoadType::SetTagsLoadData(CTypedPtrArray<CPtrArray, tagLoadData*> &src)
    {
    	m_TagsLoadData.Append(src);
    }
    
    int CSapLoadType::Count()
    {
    	return m_TagsLoadData.GetCount();
    }
    se carico l'array cosi':
    codice:
    pType->SetTagsLoadData(*pLoadDataArray);
    dove pLoadDataArray è un array tutto funziona e fuori dalla funzione mi ritrovo l'array caricato.
    MEntre se faccio cosi':
    codice:
    pType = pCase->getByID(*nBLType);
    dove getbyID ritorna una classe CSapLoadType con array caricato correttamente; fuori dalla funzione il contenuto dell'array sparisce!
    come mai?
    grazie.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Non ho letto tutto il codice ma se il ritorno è giusto ma all'interno il caricamento non avviene correttamente allora probabilmente è un problema di quel determinato metodo.. hai il codice?

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Ok letto il codice:

    1)perchè dichiari nel costruttore il m_TagsLoadData che poi non usi?

    codice:
    CSapLoadType::~CSapLoadType()
    {
    	for(int i = 0; i < m_TagsLoadData.GetSize(); i++)
    		delete m_TagsLoadData[i];
    	m_TagsLoadData.RemoveAll();
    	CTypedPtrArray<CPtrArray, tagLoadData*> m_TagsLoadData;
    }
    2)
    codice:
    tagLoadData* CSapLoadType::getByID(int ID)
    {
    	if(m_TagsLoadData.GetCount() <= ID)
    		return NULL;
    	tagLoadData* LoadData = m_TagsLoadData[ID];
    	return LoadData;
    }
    Questo ritorna l'oggetto con l'array in posizione ID credo no?

    ma mi sorge un dubbio:

    codice:
    pType->SetTagsLoadData(*pLoadDataArray);
    qui chiami il SetTagsLoadData sul puntatore pType

    codice:
    pType = pCase->getByID(*nBLType);
    qui assegni a pType il ritornodella funzione getByID fatta sul puntatore pCase

    in che modo le due cose dovrebbero fare la stessa cosa?
    forse sono io che non capisco.. prova a spiegare meglio la situazione..

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    il codice è molto esteso te ne posto una parte,
    codice:
    bool CBaseDatabaseSapData::ImportBeamLoads(int* nBLType, int* nBeamID, int* pLCaseNum, CTypedPtrArray<CPtrArray, tagLoadData*> * pLoadDataArray,CString strCase,CSapLoadType *pType)
    if(!m_pDM)
    		return false;
    
    	CSapBeam * pBeam = m_pDM->getByID(atoi(m_strNameCurrentBeam));
    	
    	if(pBeam == NULL)
    		return false;
    
    	CSapLoadCase *pCase = pBeam->getByID(strCase);
    	if(pCase==NULL)	
    		return false;
    	
    	pType = pCase->getByID(*nBLType);
    	if(pType==NULL)
    		return false;
    
    //count di array interno(privato) di ptype >0
    	return true;
    la funzione è dichiarata cosi:
    codice:
    	bool ImportBeamLoads(int* nBLType, int* nBeamID, int* pLCaseNum, CTypedPtrArray<CPtrArray, tagLoadData*> * pLoadDataArray,CString strCase, CSapLoadType *pType);
    e la funzione chiamate è questa:
    codice:
    CSapLoadType * pType = new CSapLoadType();
    
    	pLoadDataArray->RemoveAll();
    
    	if(*pLCaseNum < 0)
    		*pLCaseNum = 0;
    	tagStaticLCDataTempLogic ACData;
    	m_AnalysisCaseNum.Lookup(*pLCaseNum +1 , ACData);
    	 m_pData->ImportBeamLoads(&nBLType,&nBeamID, pLCaseNum, pLoadDataArray,ACData.strCase,pType));
    	
    //count di array interno (privato)di pType è a 0!!!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Forse bisogna usare il costruttore di copia per copiare l'oggetto ptype invece di usare l'opratore = .
    Ma non so bene come si fa!
    grazie

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    no è un puntatore quindi lo sposti e basta..

    il problema sta nella getByID.. sicuro che gli id che gli passi siano giusti? perchè l'unica cosa che mi sembra di vedere è proprio questa.. se l'id è sbagliato l'array rimane vuoto..

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    questa è la classe della getbyid:

    codice:
    // SapLoadCase.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "CmpImportApi.h"
    #include "SapLoadCase.h"
    
    
    // CSapLoadCase
    
    CSapLoadCase::CSapLoadCase()
    {
    }
    
    CSapLoadCase::~CSapLoadCase()
    {
    	for(POSITION pos = m_LoadTypes.GetStartPosition(); pos != NULL;) {
    		CSapLoadType *cSLT;
    		int nId;
    		m_LoadTypes.GetNextAssoc(pos, nId, cSLT);
    		if(cSLT)
    			delete cSLT;
    	}
    }
    
    CSapLoadType* CSapLoadCase::getByID(int ID)
    {
    	CSapLoadType *pLoadType=NULL;
    	m_LoadTypes.Lookup(ID, pLoadType);
    	return pLoadType;
    }
    
    void CSapLoadCase::setLoadType(int Id,CSapLoadType* val)
    {
    	m_LoadTypes.SetAt(Id ,val);
    }
    // CSapLoadCase message handlers

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ferma tutto.
    ho provato ad assegnare due 'CTypedPtrArray e mi ritorna questo errore:
    c:\CMPFRG\CMPIMPORTAPI\SapLoadType.cpp(13): error C2582: 'operator =' function is unavailable in 'CTypedPtrArray<BASE_CLASS,TYPE>'
    with
    [
    BASE_CLASS=CPtrArray,
    TYPE=tagLoadData *
    ]
    esiste pero' un metodo copy del 'CTypedPtrArray con il costruttore di copia.
    SIamo sicuri che non è quello?
    non è assolutmente per poca fiducia Stoicenko , ma leggendo quell'errore mi è ritornato in mente il dubbio

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 © 2025 vBulletin Solutions, Inc. All rights reserved.