Возникли проблемы при определении карты для дивидендов акций - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь написать код для расчета дивидендной доходности.Мне нужно ежедневно рассчитывать дивидендную доходность (Dividend / Stock_price).Дивиденды постоянны.В конце концов мне придется привязать цену акций к динамическому каналу, но в то же время цены на акции могут быть на их собственной карте.Я вставил суммы дивидендов для каждой акции в конструктор класса, потому что он менее трудоемок в вычислительном отношении, чем использование условных операторов в членах (т. Е. Если stock = 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 Symbol * неправильным типом для ключа?

Кроме того, если публиковать фиксированные значения карты в конструкторе неправильно, пожалуйста, дайте мне знать, что лучше.*

public:

typedef boost::unordered_map<const Symbol*, double> Dividend_Map;
typedef Dividend_Map::iterator Dividend_MapIterator;

private:
Dividend_Map p_dividend_map;

.CPP File

p_dividend_map["AAPL"] = 0.01;
p_dividend_map["BAC"] = 0.01;
p_dividend_map["C"] = 0.01;

1 Ответ

0 голосов
/ 28 марта 2012

Тип ключа для вашей карты - Symbol *, и вы пытаетесь вставить группу const char * в карту. Это не будет работать, если Symbol не является typedef 'd 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...