我正在尝试编写一些代码来计算股息收益率。我需要每天计算股息收益率(dividend / stock_price)。股息是不变的。最终,我将不得不将股票价格与动态Feed相关联,但与此同时,股票价格可能会在他们自己的地图中。我在类构造函数中插入了每个股票的股息金额,因为它在成员中使用条件语句的计算量较小(即,如果股票= Apple,则股息为X)。我从“AAPL”之前的'['开始收到以下错误消息:
**error C2679: binary '[' : no operator found which takes a right-hand operand of type 'const
char [5]' (or there is no acceptable conversion) c:\boost/unordered/unordered_map.hpp(415):
could be 'double &boost::unordered_map<K,T>::operator [](const FinModels::Instrument *const &)'
with
[
K=const FinModels::Instrument *,
T=double
]
while trying to match the argument list '(DividendMap, const char [5])'**
任何人都可以根据我的简短代码和说明帮助我吗? const符号*是否为密钥类型不正确?
另外,如果在构造函数中发布固定的地图值是不合适的,请告诉我哪些更好。
标头文件
public:
typedef boost::unordered_map<const Symbol*, double> Dividend_Map;
typedef Dividend_Map::iterator Dividend_MapIterator;
private:
Dividend_Map p_dividend_map;
.CPP文件
p_dividend_map["AAPL"] = 0.01;
p_dividend_map["BAC"] = 0.01;
p_dividend_map["C"] = 0.01;
答案 0 :(得分:0)
地图的密钥类型为Symbol *
,您正试图将一堆const char *
粘贴到地图中。除非Symbol
typedef
为char
,否则此操作无效。
从要存储在地图中的每个符号中创建一个Symbol
对象,然后将其地址添加到地图中。
Symbol appl("AAPL"); // assuming Symbol has a constructor taking a const char *
p_dividend_map[&appl] = 0.01;
在上面的示例中,aapl
的生命周期必须与其作为地图成员的生命周期相匹配。如果aapl
的生命周期到期,您将使地图指向无效的内存位置。
您可能想要将地图更改为
typedef boost::unordered_map<Symbol, double> Dividend_Map;
然后将其用作
Symbol appl("AAPL");
p_dividend_map[appl] = 0.01;