标题:class中访问的问题
只看楼主
zfan85
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2010-8-30
结帖率:66.67%
已结贴  问题点数:10 回复次数:7 
class中访问的问题
定义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 编辑 ]
搜索更多相关主题的帖子: 访问 class 
2010-10-15 01:58
C之家
Rank: 2
等 级:论坛游民
帖 子:12
专家分:32
注 册:2010-9-14
得分:1 
你把继承改成虚继承试试
2010-10-15 16:48
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:1 
在 PolarRej类申明 MonteCarlo1Asset类为友元类就可以了!

If You Want Something, Go Get It, Period.
2010-10-15 17:05
zfan85
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2010-8-30
得分:0 
那为什么这样是不可以的?
2010-10-16 12:15
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
得分:0 
不申明为友元或继承关系,就不能访问类PolarRej的私有成员啊!

If You Want Something, Go Get It, Period.
2010-10-16 12:27
zfan85
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2010-8-30
得分:0 
public:
    static PolarRej* Instance();
    double generate();  
generate()不是公共的么?
2010-10-16 13:25
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:1 
不是那个意思,是说你的class PolarRej对象无法构造,因为它没有一个公有的构造函数可用。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-10-16 13:38
yusan
Rank: 2
等 级:论坛游民
帖 子:17
专家分:49
注 册:2010-10-16
得分:1 
我告诉你  他们之间的关系  私有的成员只有自己类才能访问 就连子类也不行即private
公共的都可以即public
还有个protect是受保护的
2010-10-16 22:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-322942-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.613201 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved