无法为股票股息定义地图

时间:2012-03-28 16:09:31

标签: c++ map

我正在尝试编写一些代码来计算股息收益率。我需要每天计算股息收益率(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;

1 个答案:

答案 0 :(得分:0)

地图的密钥类型为Symbol *,您正试图将一堆const char *粘贴到地图中。除非Symbol typedefchar,否则此操作无效。

从要存储在地图中的每个符号中创建一个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;