2015-06-12 4 views
0

Код ниже, при компиляции производит следующие ошибки:Путаница с инициализацией СТД :: пар

ошибка C2439: «станд :: пары :: первый»: член не может быть инициализирован

ошибке C2440: «инициализации»: не удается преобразовать из «Int» в «сопзЬ AnalyticsToolKit :: ParcelPassingLogic :: ParticipantNode &»

Когда я закомментировать в нижней строке однако, нет такой ошибки, так что должно быть что-то неправильно с ва y пара возвращается из хеш-таблицы?

P.S. Я также использую Qt-пакет, QHash в основном такой же, как unordered_map, а QStrings - как std :: string, но они могут использоваться как хеш-ключи.

Любая помощь будет очень признательна !!

struct ParticipantNode 
{ 
    QHash<const QString, std::pair<const ParticipantNode&, double> > soldToParticipants; 
}; 

QHash<QString, QHash<QString, ParticipantNode> > mGraphs; 


QString buyer = "someString"; 
QString seller = "someString"; 
QString security = "someString"; 
double value = someDouble; 

QHash<QString, ParticipantNode>& tradeGraph = mGraphs[security]; 
ParticipantNode& sellerNode = tradeGraph[seller]; 
QHash<const QString, std::pair<const ParticipantNode&, double> > sellersSoldToParticipants = sellerNode.soldToParticipants; 

std::pair<const ParticipantNode&, double> tradeDetails = sellersSoldToParticipants[buyParticipant]; 
+0

что 'sellParticipantNode' и откуда оно взялось? Можете ли вы создать [SSCCE] (http://sscce.org)? – NathanOliver

+0

Извините, я его внедрил, это должно быть «sellerNode» –

ответ

2

Я ничего не знаю, QT, но если QHash ничего подобного unordered_map, то вопрос, где вы используете operator[]. Эта функция будет вставлять построенное по умолчанию значение для заданного ключа, если оно не существует. Для того, чтобы сделать это, значение типа должен быть по умолчанию конструктивна, а также:

std::pair<const ParticipantNode&, double> 

не по умолчанию, конструктивен, поскольку const ParticipantNode& не по умолчанию-конструктивно.

Вы должны будете использовать find() вместо или QT эквивалент этого:

auto it = sellersSoldToParticipants.find(buyParticipant); 
if (it != sellersSoldToParticipants.end()) { 
    std::pair<const ParticipantNode&, double> tradeDetails = it->second; 
} 
+0

Спасибо за ответ :) Является ли const и/или '&' запрещающим его по умолчанию конструктивным? –

+0

@AshleyPhillips ссылка. – Barry

+0

Спасибо, сейчас работает! –

Смежные вопросы