2015-06-12 75 views
0

下面的代碼,編譯時產生以下的錯誤:混淆的std ::對初始化

錯誤C2439: '的std ::對::第一':構件無法初始化

錯誤C2440:初始化:不能從「詮釋」轉換爲「常量AnalyticsToolKit :: ParcelPassingLogic :: ParticipantNode &」

當我註釋掉但是底線,有沒有這樣的錯誤,所以一定有什麼與wa錯誤Ÿ這個對是從哈希表中傳回來的?

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> 

不是默認-constructible因爲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

謝謝,它現在正常工作:) –