Problema con un void ,C++

di Anonimizzato12379 il
12 risposte
Salve a tutti ho un problema con programmino che sto realizzando per l'esame di fisica computazionale.

classe neutron.h
#ifndef NEUTRON_H
#define NEUTRON_H


#include<cmath>
using namespace std;

class Neutron
   {  
     public:
          Neutron(double x0,double y0, double z0, double vx, double vy,double vz):x0_(x0),y0_(y0),z0_(z0),vx_(vx),vy_(vy),vz_(vz){}
          double getx0() const {return x0_;}; 
          double gety0() const {return y0_;};
          double getz0() const {return z0_;};
          double getvx() const {return vx_;}; 
          double getvy() const {return vy_;};
          double getvz() const {return vz_;};
          void change(double xn, double yn , double zn) { x0_= xn; y0_=yn; z0_=zn; };
     

   private:
      double x0_,y0_,z0_,vx_,vy_,vz_;
      };
      
#endif
classe distribuzione.h
#ifndef DISTRIBUTION
#define DISTRIBUTION

#include<cmath>
#include"neutron.h"

using namespace std;


class Mdistribution 
   {
  
     public:
     void Mvelocity( Neutron *n);
     
    
   
     };





#endif
e il file cc che voglio compilare
#include <iostream> 
#include <string> 
#include <cmath>
#include <stdlib.h>
#include <time.h>
#include "neutron.h"
#include "distribuzione.h"


using namespace std;



void Mdistribution::Mvelocity( Neutron *n) 
{
  srand(time(NULL));     
  double T,vx,vy,vz,v;
	v=rand();
	cout<<v<<"valore di v"<<endl;
	vx=rand()%2*v;
	vy=rand()%2*(v-vx);
	vz=(v-vx-vy);
	void n->change(vx,vy,vz);
}
l'errore che mi da il terminale è
distribuzione.cc: In member function ‘void Mdistribution::Mvelocity(Neutron*)’:
distribuzione.cc:23:8: error: expected initializer before ‘->’ token

Non metto mano al c++ da un po' quindi sono un po' arruginito probabilmente è una cosa banale ma non riesco a correggerla. Grazie

12 Risposte

  • Credo ti basti togliere il void, che in quella posizione ha poco senso
       /*void*/ n->change(vx,vy,vz);
  • Da un altro errore se tolgo il void
    /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: nella funzione "_start":
    (.text+0x20): riferimento non definito a "main"
    collect2: error: ld returned 1 exit status
  • Verifica nei vari file .c/.cc di avere la funzione main()
    Se ce l'hai verifica se stai effettivamente compilando il file .cc contenente la main() (se hai un Makefile potrebbe essere che non hai aggiunto il file in questione)
  • In effetti nei file che hai mostrato non c'è la funzione main ...
  • In realtà volevo provare a compilare il solo file .cc e vedere se mi dava problemi
  • Per solo compilare con gcc, se non ricordo male, devi utilizzare la flag -c altrimenti tenta di crearti un binario eseguibile (in cui serve il main())
  • Inserisci un main di prova.
  • Risolto , sbagliavo il comando di compilazione. Graizie comunque per l'attenzione
  • Non sono stato chiaro ... sicuramente puoi semplicemente compilare senza necessità di main ma con un main di prova riesci anche a testare il codice oltre che a compilarlo ...
  • Ho fatto un main di prova e ho modificato per provare distribuzione.cc
    #include <iostream> 
    #include <string> 
    #include <cmath>
    #include <stdlib.h>
    #include <time.h>
    #include "neutron.h"
    #include "distribuzione.h"
    
    
    using namespace std;
    
    
    
    void Mdistribution::Mvelocity( Neutron *n) 
    {
      srand(time(NULL));     
      double T,vx,vy,vz,v;
    	v=rand();
    	vx=n->getvx();
    	cout<<vx<<"valore di v"<<endl;
    	vx=rand()%2*v;
    	vy=rand()%2*(v-vx);
    	vz=(v-vx-vy);
            n->change(0,0,0);
    	vx=n->getvx();
    	cout<<vx<<"valore di v"<<endl;
    	
    }
    e il main
    #include "neutron.h"
    #include "distribuzione.h"
    
    int main () {
       Neutron *n=new Neutron (1,1,1,1,1,1);
       Mdistribution distribuzione;
       distribuzione.Mvelocity (n);
    }
    tuttavia come vedete in distribuzione.cc provo a modificare i valori di neutron utilizzando il metodo change ma quando vado a stampare il valore non è stato minimamente modificato. Perchè?
  • Change cambia x y z ma non tocca vx ... quindi il problema non esiste ...
  • AH si che sbadato , grazie mille
Devi accedere o registrarti per scrivere nel forum
12 risposte