Passare un vettore da un file a un altro

di Anonimizzato19879 il
8 risposte
Ciao a tutti,
ho quwsta funzione
void B1DetectorConstruction::PassSamplePosition(){
	sampleLabPos=NfilledchamberRelPos+sampleRelPos;	
	
        
}
nel file B1detectorconstruction.cc

sampleLabPos è un vettore che mi da una posizione (x,y,z)

io devo mandare questo vettore a un altro file chiamato B1PrimaryGeneratorAction. Qualcuno sa come posso fare?

8 Risposte

  • Quello che chiedi non è chiaro. Che intendi con mandare ad altro file? Stai mostrando solo un metodo di una classe sconosciuta che fa una chiamata che non dice molto.

    Parliamo di due programmi che girano indipendentemente tra loro?

    O di un solo programma? E in questo caso come è organizzato? Di che tipo è quantità di dati parliamo?
  • oregon ha scritto:


    Quello che chiedi non è chiaro. Che intendi con mandare ad altro file?
    Ciao, oregon, innanzitutto grazie.
    Nel file B1DetectorConstruction.cc calcolo il valore del vettore sampleLabPos nella funzione
    void B1DetectorConstruction::PassSamplePosition(){
    	sampleLabPos=NfilledchamberRelPos+sampleRelPos;	
    	
            
    }
    
    Questo valore, devo passarlo a un altro file, dello stesso programma, chiamato B1PrimaryGeneratorAction.cc
    Ovvero, in questo file ho la funzione:
    void B1PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
    {
    fGeneralParticleSource->SetParticlePosition(sampleLabPos);
      fGeneralParticleSource->GeneratePrimaryVertex(anEvent);
    }
    
    Quindi, come vedi, mi serve che
    sampleLabPos
    sia "letto" da B1PrimaryGeneratorAction.cc per essere qui utilizzato. Cioè B1PrimaryGeneratorAction deve sapere che sampleLabPos è un vettore (0,0,n) dove valore n è il numero calcolato



    Questi sono i files https://we.tl/t-fFoX7bixN




    Ps. Il programma, in realtà è una simulazione Geant4, ovvero un toolkit per simulare interazioni di particelle. In pratica, ci sono delle librerie che vengono chiamate..ma è codice c++.

    Ha di diverso solo qualche nome...ad esempio le variabili anzichè double, si chiamano G4double, ecc. ma in realtà ovviamente funziona anche chiamando con i nomi propri del c++...quindi double, ecc.
  • Il vector sampleLabPos è un membro public della classe B1DetectorConstruction

    Quindi, da una istanza di quella classe, puoi accedere direttamente a sampleLabPos
  • Ciao oregon, potresti scrivermi un pezzo di codice di esempio per far questo per favore?
  • Scusa ma non ha senso. Tu non hai un mail in cui usi quelle classi? Lo vediamo?
  • Identifica i due oggetti delle due classi istanziati nel tuo main (non sono al computer, posso solo darti indicazioni, ma tu devi saper usare la OOP con il C++ se vuoi risolvere).

    Il vettore di cui parli è pubblica quindi, una volta istanziato un oggetto che usa quel vettore, passa il riferimento dell'oggetto all'altro oggetto che lo deve usare tramite apposito metodo che lo accetta.
  • Ma come si fa a instanziare?
Devi accedere o registrarti per scrivere nel forum
8 risposte