注册 登录
编程论坛 C++教室

class中访问的问题

zfan85 发布于 2010-10-15 01:58, 767 次点击
定义PolarRe如下
#ifndef MATHLIB_H
#define MATHLIB_H

class RandGen {
private:
    static bool seed;
public:
    RandGen();
    virtual double generate() = 0;
};

class PolarRej : public RandGen {
private:
    static PolarRej* _instance;
    PolarRej(): first(true) {}
    bool first;
    double rv2;
public:
    static PolarRej* Instance();
    double generate();
};

class SinCos : public RandGen {
private:
    static SinCos* _instance;
    SinCos(): first(true) {}
    bool first;
    double rv2;
public:
    static SinCos* Instance();
    double generate();
};

class Uniform : public RandGen {
private:
    static Uniform* _instance;
    Uniform() {}
public:
    static Uniform* Instance();
    double generate();
};

class Exponential : public RandGen {
private:
    static Exponential* _instance;
    Exponential() {}
public:
    static Exponential* Instance();
    double generate();
};


double __stdcall uniform();
double __stdcall exponential();
double __stdcall normalPR();
double __stdcall normalSC();

#endif




但是在double MonteCarlo1Asset::simulate()
{
    PolarRej Normal;
    return getSpotVal()=getSpotVal()*exp((getIr()-getDiv()-0.5*getVol()*getVol())*getDt()+getVol()*sqrt(getDt())*Normal.generate());
}中 出现 cannot access private member declared in class 'PolarRej',是怎么回事,generate不是public的么?


[ 本帖最后由 zfan85 于 2010-10-15 02:00 编辑 ]
7 回复
#2
C之家2010-10-15 16:48
你把继承改成虚继承试试
#3
m21wo2010-10-15 17:05
在 PolarRej类申明 MonteCarlo1Asset类为友元类就可以了!
#4
zfan852010-10-16 12:15
那为什么这样是不可以的?
#5
m21wo2010-10-16 12:27
不申明为友元或继承关系,就不能访问类PolarRej的私有成员啊!
#6
zfan852010-10-16 13:25
public:
    static PolarRej* Instance();
    double generate();  
generate()不是公共的么?
#7
东海一鱼2010-10-16 13:38
不是那个意思,是说你的class PolarRej对象无法构造,因为它没有一个公有的构造函数可用。
#8
yusan2010-10-16 22:33
我告诉你  他们之间的关系  私有的成员只有自己类才能访问 就连子类也不行即private
公共的都可以即public
还有个protect是受保护的
1