Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C - C++] Problemi con un generatore di numeri casuali

    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

  2. #2
    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?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Mi sfugge una cosa ... ParetoRV e' un puntatore ... quando viene istanziato l'oggetto?

  4. #4
    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

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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.

  6. #6
    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...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.