PDA

Visualizza la versione completa : [C/C++] Problemi vari con un generatore di numeri casuali


mietitoredanime
13-02-2007, 16:32
Ciao a tutti, sto usando la libreria newran per utilizzare un generatore di numeri casuali, ho scritto il seguente codice:

Constant *ConstantRV;
Uniform *UniformRV;
Exponential *ExponentialRV;
Pareto *ParetoRV;
Cauchy *CauchyRV;
Normal *NormalRV;
Poisson *PoissonRV;
Gamma *GammaRV;

SumRandom ** pIntArriv;
*pIntArriv = new SumRandom(1.1 * (*ParetoRV));

mi da errore in compilazione, più in particolare mi dice:
error: no match for ‘operator*’ in ‘1.10000000000000008881784197001252323389053344727 e+0 * * ParetoRV’

Qualcuno mi può dare una mano x favore?
Uso il compilatore g++ di Linux, e la distribuzione di Linux che uso è la Ubuntu 6.10

mietitoredanime
13-02-2007, 18:05
Per quello che ho capito il problema è che non riconosce l'operatore * definito nella classe MultipliedRandom che accetta il costruttore di SumRandom, nonostante il file che contiene la classe MultipliedRandom venga compilato prima di quello in cui c'è il codice che ho postato. Il codice è stato testato su altre macchine e funziona quindi credo che sia corretto, c'è qualche direttiva particolare da dare al compilatore?

oregon
13-02-2007, 21:20
Mi sfugge una cosa ... ParetoRV e' un puntatore ... quando viene istanziato l'oggetto?

mietitoredanime
14-02-2007, 08:53
Hai ragione, ho dimenticato di riportare la dichiarazione, ti riscrivo il codice completo:

Constant *ConstantRV;
Uniform *UniformRV;
Exponential *ExponentialRV;
Pareto *ParetoRV;
Cauchy *CauchyRV;
Normal *NormalRV;
Poisson *PoissonRV;
Gamma *GammaRV;

SumRandom ** pIntArriv;
int numval = 15;
Real prob[] =
{ 0.65, 0.13, 0.07, 0.05, 0.03, 0.01, 0.01, 0.01, 0.01, 0.005, 0.005, 0.005,0.005,0.005, 0.005 };
ParetoRV = new Pareto(0.95);
IntArrivDistro = pdPareto;
delete(*pIntArriv);
*pIntArriv = new SumRandom(1.1 * (*ParetoRV));

L'errore lo da nell'ultima riga

oregon
14-02-2007, 11:04
A parte che questa delete


Originariamente inviato da mietitoredanime
delete(*pIntArriv);


non e' corretta in quanto, in quel momento, pIntArriv non e' valido, il problema mi sembra un altro ...

Cosa dovrebbe restituire il prodotto di una costante

1.1 *

per un oggetto

*ParetoRV

Cioe', mi sembra che tu debba indicare una proprietà o un metodo che restituisca qualcosa da moltiplicare per 1.1 ma non l'oggetto stesso.

mietitoredanime
14-02-2007, 12:08
l'oggetto passato al costruttore di SumRandom dovrebbe essere di tipo MultipliedRandom, che definisce l'operazione di moltiplicazione tra un oggetto di tipo Pareto ed una costante. Ripeto questo codice sulle altre macchine funziona, non funziona solo sulla mia macchina, a questo punto credo di aver sbagliato qualche direttiva di compilazione o che a Ubuntu manchi qualche libreria...

Loading