CHa*_*awk 2 c++ pointers reference
得到一些真正令人困惑的错误,并不确定为什么.这是我的代码:
//=====================WORKS=======================
TradingBook::TradingBook(const char* yieldCurvePath, const char* bondPath)
{
//...Some stuff
BaseBond* tradingBook[bondCount];
for (int i=0; i < bondCount; i++)
{
tradingBook[i] = new CouponBond(bonds[i]);
printf("Bond: %s\n"
" Price: %.3f\n"
" DV01: %.3f\n"
" Risk: %.3f\n", tradingBook[i]->getID(), tradingBook[i]->getPrice(), tradingBook[i]->getDV01(), tradingBook[i]->getRisk());
}
}
//=================DOESNT WORK======================
//Gives Error: base operand of ‘->’ has non-pointer type ‘BaseBond’
void TradingBook::runAnalytics()
{
for (int i=0; i < bondCount; i++)
{
tradingBook[i]->calcPrice(tradingBook[i]->getYield());
tradingBook[i]->calcDV01();
tradingBook[i]->calcRisk();
printf("Bond: %s\n"
" Price: %.3f\n"
" DV01: %.3f\n"
" Risk: %.3f\n", tradingBook[i]->getID(), tradingBook[i]->getPrice(), tradingBook[i]->getDV01(), tradingBook[i]->getRisk());
}
}
Run Code Online (Sandbox Code Playgroud)
我得到' - >'的错误基数操作数在 - >的每个实例都有非指针类型'BaseBond',但只在runAnalytics()方法中.tradingBook是一个公共类变量.为什么它会在底部方法中给出错误而不是构造函数?我不明白.
我也尝试在第二种方法中将所有的tradingBook [i] - > method()更改为tradingBook [i] .method(),但它给了我一个分段错误,所以我认为这是不对的.任何人都可以帮我解决我的困惑吗?
如果需要,这里是TradingBook的头文件:
class TradingBook
{
public:
TradingBook(const char* yieldCurvePath, const char* bondPath);
double getBenchmarkYield(short bPeriods) const;
BaseBond* tradingBook;
int treasuryCount;
Treasury* yieldCurve;
int bondCount;
void runAnalytics();
};
Run Code Online (Sandbox Code Playgroud)
BaseBond是一个抽象类.它的孩子是CouponBond和ZeroCouponBond.tradingBook [i]充满了这两种类型.这是BaseBond的标题:
class BaseBond{
public:
virtual double getPrice() = 0;
virtual double getYield() = 0;
virtual short getPeriods() = 0;
virtual char* getID() = 0;
virtual double getDV01() = 0;
virtual double getRisk() = 0;
virtual char* getRateType() = 0;
virtual void calcPrice(double nyield) = 0;
virtual double calcPriceR(double nyield) const = 0;
virtual void calcDV01() = 0;
virtual void calcRisk() = 0;
};
Run Code Online (Sandbox Code Playgroud)
提前谢谢,stackOverFlow!
那是因为你tradingBook[i]是一个对象,而不是一个指针,因为你指的tradingBook是定义为的成员变量TradingBook *tradingBook.所以,用tradingBook[i].而不是tradingBook[i]->.