Problema con un void ,C++

di il
12 risposte

Problema con un void ,C++

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

  • Re: Problema con un void ,C++

    Credo ti basti togliere il void, che in quella posizione ha poco senso
       /*void*/ n->change(vx,vy,vz);
  • Re: Problema con un void ,C++

    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
  • Re: Problema con un void ,C++

    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)
  • Re: Problema con un void ,C++

    In effetti nei file che hai mostrato non c'è la funzione main ...
  • Re: Problema con un void ,C++

    In realtà volevo provare a compilare il solo file .cc e vedere se mi dava problemi
  • Re: Problema con un void ,C++

    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())
  • Re: Problema con un void ,C++

    Inserisci un main di prova.
  • Re: Problema con un void ,C++

    Risolto , sbagliavo il comando di compilazione. Graizie comunque per l'attenzione
  • Re: Problema con un void ,C++

    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 ...
  • Re: Problema con un void ,C++

    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è?
  • Re: Problema con un void ,C++

    Change cambia x y z ma non tocca vx ... quindi il problema non esiste ...
  • Re: Problema con un void ,C++

    AH si che sbadato , grazie mille
Devi accedere o registrarti per scrivere nel forum
12 risposte