2015-10-20 22 views
0

我使用Qt和我想聲明以下容器:如何在QMap中使用QSet作爲值?

QMap<QUrl , QSet<ClassSharedPtr> > map; 

這裏ClassSharedPtr是一流的「類」的助推共享PTR。

typedef boost::shared_ptr<const Class> ClassPtr; 

我加入頭文件中的#include後得到以下錯誤:

error: no matching function for call to ‘qHash(const boost::shared_ptr<const Class>&)’ 
+0

通常情況下,這意味着你缺少一個頭包。 – user2672165

+0

你使用什麼編譯器?你看到那個http://stackoverflow.com/questions/2997340/gcc-workaround-while-using-shared-ptr-to-insert-in-stdset – demonplus

回答

0

QSet的值的數據類型必須是可分配的數據類型。此外,類型必須提供operator==(),而且還必須在該類型的命名空間的值的類型的參數,返回散列值的qHash()功能。

所以,你應該實現qHash()功能boost::shared_ptr<const Class>

namespace boost { 

uint qHash(const boost::shared_ptr<const Class> &key, uint seed = 0) 
{ 
    const Class *ptr = key.get(); 
    return uint(ptr)^seed; 
} 

}