Problema costruttori c++

di il
5 risposte

Problema costruttori c++

Buongiorno a tutti, sono alle prime armi in c++ e sto cercando di creare un programmino che mi risolva determinate equazioni (che mi dia cioè i valori di ascisse e ordiante ad intervalli prestabiliti), ma con una di queste equazioni, pur non presentandomi errori apparenti di compilazione, mi segnala:

variabile locale 'd1' utilizzata senza essere stata prima inizializzata
variabile locale 'd2' utilizzata senza essere stata prima inizializzata
variabile locale 'd3' utilizzata senza essere stata prima inizializzata
...

le variabili locali in questione (d1,d2,d3,d4,d5,d6,d7) sono dei parametri che l'utente deve inserire a priori e con i quali il programma dovrebbe risolvere le equazioni in esame.
Mi potete aiutare?é un problema di costruttori (nel senso che io debba creare dei costruttori che mi diano dei valori di default per queste variabili)?Perchè non sono molto pratico di costruttori...
vi riporto le righe di codice in esame;


main.cpp

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <cmath>
#include "trapezgeneral7tratti.h"
{
	cout << "prova";
	trapezgeneral7tratti miafunzione;
                miafunzione.set_length(5);
	miafunzione.set_d1(1.7);
	miafunzione.set_d2(1.1);
	miafunzione.set_d3(0.2);
	miafunzione.set_d4(0.5);
	miafunzione.set_d5(0.2);
	miafunzione.set_d6(1.3);
	miafunzione.set_d7(1);
	
	for (double xc = 0; xc <= 6; xc = xc+0.05)
	{
		double y = miafunzione.calcola_y(xc);
		double ydt = miafunzione.calcola_ydt(xc);
		double ydtdt = miafunzione.calcola_ydtdt(xc);
		cout << xc << "   " << y;
		cout << xc << "   " << ydt;
		cout << xc << "   " << ydtdt;
		cout << "\n";
	}
	    }

/////

trapezgeneral7tratti.h

#ifndef TRAPEZGENERAL7TRATTI_H
#define TRAPEZGENERAL7TRATTI_H
#include "stdafx.h"
#include <iostream>
#include <limits>
#include <math.h>
#include <cmath>
#include <string>
#include "funzionebase.h"
using namespace std;

class trapezgeneral7tratti: public funzionebase
{
public:
	virtual double calcola_y (double x);
	virtual double calcola_ydt (double x);
	virtual double calcola_ydtdt (double x);
                virtual void calcola_coeff1(); 
               	virtual void set_length(double mL) {L = mL;};
	virtual double get_length() {return L;}
	virtual void set_d1 (double md) {d1 = md; calcola_coeff1();}
	virtual double get_d1() {return d1;}
	virtual void set_d2 (double md) {d2 = md; calcola_coeff1();}
	virtual double get_d2() {return d2;}
	virtual void set_d3 (double md) {d3 = md; calcola_coeff1();}
	virtual double get_d3() {return d3;}
	virtual void set_d4 (double md) {d4 = md; calcola_coeff1();}
	virtual double get_d4() {return d4;}
	virtual void set_d5 (double md) {d5 = md; calcola_coeff1();}
	virtual double get_d5() {return d5;}
	virtual void set_d6 (double md) {d6 = md; calcola_coeff1();}
	virtual double get_d6() {return d6;}
	virtual void set_d7 (double md) {d7 = md; calcola_coeff1();}
	virtual double get_d7() {return d7;}

private:
    double L;
    double d1,d2,d3,d4,d5,d6,d7,x1,x2,x3,x4,x5,x6,a11,a12,a21,a22,A,B,V1,V2,V3,V4,V5,V6,S1,S2,S3,S4,S5,S6;
};
#endif
///

trapezgeneral7tratti.cpp

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <cmath>
#include "trapezgeneral7tratti.h"


double trapezgeneral7tratti::calcola_y(double x)
{
	double x_a = x/this->L; // x_a always 0...1 
	void calcola_coeff1();

	if ((x_a >=0) && (x_a < d1))
	{
		return 0.6366385*d1*A*(x_a-0.6366385*d1*sin(1.57075*x_a/d1));
	}
	else if ((x_a >=d1) && (x_a < d1+d2))
	{
		return 0.5*A*pow(x_a-x1,2)+V1*(x_a-x1)+S1;
	}
	else if ((x_a >=d1+d2) && (x_a < d1+d2+d3))
	{
		return (((pow(0.6366385*d3,2))*(A*(1-cos(1.57075*(x_a-x2)/d3))))+V2*(x_a-x2)+S2);
	}
	else if ((x_a >=d1+d2+d3) && (x_a < d1+d2+d3+d4))
	{
		return V3*(x_a-x3)+S3;
	}
	else if ((x_a >=d1+d2+d3+d4) && (x_a < d1+d2+d3+d4+d5))
	{
		return -B*0.6366385*d5*(x_a-x4-(0.6366385*d5*sin(1.57075*(x_a-x4)/d5)))+V4*(x_a-x4)+S4;
	}
	else if ((x_a >=d1+d2+d3+d4+d5) && (x_a < d1+d2+d3+d4+d5+d6))
	{
		return S5+(V5*(x_a-x5))-(0.5*B*pow(x_a-x5,2));
	}
	else if ((x_a >=d1+d2+d3+d4+d5+d6) && (x_a < 1))
	{
		return (pow(0.6366385*d7,2)*B*(cos(1.57075*(x_a-x6)/d7)-1))+V6*(x_a-x6)+S6;
	}
	else if (x_a <0)
		return 0;
	else
		return 1;
}

double trapezgeneral7tratti::calcola_ydt(double x)
{
	double x_a = x/this->L; // x_a always 0...1 
	void calcola_coeff1();

	if ((x_a >=0) && (x_a < d1))
	{
		return (0.6366385*A*(1-cos(1.57075*x_a/d1)))*(1/L);
	}
	else if ((x_a >=d1) && (x_a < d1+d2))
	{
		return (A*(x_a-x1)+V1)*(1/L);
	}
	else if ((x_a >=d1+d2) && (x_a < d1+d2+d3))
	{
		return ((0.6366385*d3*A*sin(1.57075*(x_a-x2)/d3))+V2)*(1/L);
	}
	else if ((x_a >=d1+d2+d3) && (x_a < d1+d2+d3+d4))
	{
		return (V3)*(1/L);
	}
	else if ((x_a >=d1+d2+d3+d4) && (x_a < d1+d2+d3+d4+d5))
	{
		return (-B*0.6366385*d5*(1-cos(1.57075*(x_a-x4)/d5))+V4)*(1/L);
	}
	else if ((x_a >=d1+d2+d3+d4+d5) && (x_a < d1+d2+d3+d4+d5+d6))
	{
		return (V5-(B*(x_a-x5)))*(1/L);
	}
	else if ((x_a >=d1+d2+d3+d4+d5+d6) && (x_a < 1))
	{
		return (V6-(B*0.6366385*d7*sin(1.57075*(x_a-x6)/d7)))*(1/L);
	}
	else
		return 0;
}

double trapezgeneral7tratti::calcola_ydtdt(double x)
{
	double x_a = x/this->L; // x_a always 0...1 
	void calcola_coeff1();

	if ((x_a >=0) && (x_a < d1))
	{
		return (A*sin(1.57075*x_a/d1))*(1/(L*L));
	}
	else if ((x_a >=d1) && (x_a < d1+d2))
	{
		return (A)*(1/(L*L));
	}
	else if ((x_a >=d1+d2) && (x_a < d1+d2+d3))
	{
		return (A*cos(1.57075*(x_a-x2)/d3))*(1/(L*L));
	}
	else if ((x_a >=d1+d2+d3) && (x_a < d1+d2+d3+d4))
	{
		return 0;
	}
	else if ((x_a >=d1+d2+d3+d4) && (x_a < d1+d2+d3+d4+d5))
	{
		return (-B*sin(1.57075*(x_a-x4)/d5))*(1/(L*L));
	}
	else if ((x_a >=d1+d2+d3+d4+d5) && (x_a < d1+d2+d3+d4+d5+d6))
	{
		return (-B)*(1/(L*L));
	}
	else if ((x_a >=d1+d2+d3+d4+d5+d6) && (x_a < 1))
	{
		return ((-0.5*B*cos(1.57075*(x_a-x6)))/d7)*(1/(L*L));
	}
	else
		return 0;
}



void trapezgeneral7tratti::calcola_coeff1() 
{
   double d1,d2,d3,d4,d5,d6;
   double x1 = d1;
   double x2 = d1+d2;
   double x3 = d1+d2+d3;
   double x4 = d1+d2+d3+d4;
   double x5 = d1+d2+d3+d4+d5;
   double x6 = d1+d2+d3+d4+d5+d6;
   double a11 = ((0.6366385*d1)+d2+(0.6366385*d3));
   double a12 = (-(0.6366385*d5)-d6-(0.6366385*d7));
   double a21 = ((0.6366385*d1)*((0.3633615*d1)+(0.5*d2))+(((0.6366385*d1)+d2);           
double a22 = ((((0.6366385*d7)+d6)*((0.3633615*d5)+(0.5*d6)))+((0.6366385*d7)*((0.5*d6)))));
   double A = (-(-(0.6366385*d5)-d6-(0.6366385*d7))/((((0.6366385*d1))));
   double B = (((0.6366385*d1)+d2+(0.6366385*d3))/((((0.6366385*d1)+d2;
   double V1 = (0.6366385*d1*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double V2 = (((-(-(0.6366385*d5)-d6-(0.6366385*d7))/((((0.6366385*d1);
   double V3 = ((0.6366385*d3*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double V4 = ((0.6366385*d3*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double V5 = ((0.6366385*d3*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double V6 = ((0.6366385*d3*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double S1 = ((0.6385*d1*d1*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double S2 = ((0.5*(-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double S3 = ((pow(0.6366385*d3,2)*(-(-(0.6366385*d5)-d6))));   
   double S4 = (((-(-(0.6366385*d5)-d6-(0.6366385*d7));
   double S5 = (((-(-(0.6366385*d5)-d6-(0.6366385*d7*d7)+d6)*((0.3633615*d5)+(0.5*d6)));
   double S6 = ((0.6366385*d7)*((0.5*d6)+(0.+(0.0.50.*d7)))));
}
////



5 Risposte

  • Re: Problema costruttori c++

    Non esiste il costruttore della classe. il costruttore è della forma
    
    trapezgeneral7tratti::trapezgeneral7tratti();
    
    Poi il codice che hai messo non si compila, ci sono troppi errori.
  • Re: Problema costruttori c++

    Si lo so che non si compila perchè ho semplificato molto il gruppo di equazioni, altrimenti per voi leggerlo sarebbe diventato allucinante (c'erano equazioni lunghe 30 righe), e poi manca un file .h fondamentale per la compilazione, ma sarebbe stato lunghissimo inserire tutto!!...ho postato il codice solo per darvi un'idea della forma del mio programma

    mi basterebbe avere un esempio di come utilizzare il costruttore della classe e come chiamarlo in causa, visto che non lo ho mai fatto e non ne sono capace...

    comunque se volete ve lo posto per intero
  • Re: Problema costruttori c++

    
    test.h
    class test
    {
    public:
          test();
           ~test();
    private:
    int valore1;
    int valore2;
    }
    
    test.cpp
    test::test()
    : valore1(0)
    , valore2(0)
    {
    }
    
    test::~test()
    {
    }
    
    main.cpp
    int main()
    {
       test mioTest; //in questo punto il costructor è già stato invocato ed ha azzerrato le variabili.
    }//quì viene invocato il destructor che in questo caso fa niente.
    
  • Re: Problema costruttori c++

    Ho provato a inserire quel costruttore ma è come se non lo avessi inserito. Mi da sempre lo stesso problema...
  • Re: Problema costruttori c++

    Si vabbé, se fai vedere un pezzo di codice magari. Poi ho visto che in questa funzione
    
    void trapezgeneral7tratti::calcola_coeff1() 
    
    hai ridefinito le variabili da d1 a d6. Il compilatore ti dice anche dove c'è questo warning.

    Altra cosa ca cambiare:
    
     for (double xc = 0; xc <= 6; xc = xc+0.05)
    
    un for di float o double non è consigliato.
Devi accedere o registrarti per scrivere nel forum
5 risposte