2009-10-10 38 views
1

我的代碼在我定義的抽象數據類型的列表上使用std :: count()。 (Sommet或英文Edge)。但是,這是行不通的,雖然我已經超載了<和==操作符是這樣的:C + + - 使用std :: count()與抽象數據類型?

bool operator< (const Sommet &left, const Sommet &right) 
{ 
    if(left.m_id_sommet < right.m_id_sommet) 
    return true; 

    return false; 
} 

bool operator== (const Sommet &left, const Sommet &right) 
{ 
    if(left.m_id_sommet == right.m_id_sommet) 
    return true; 

    return false; 
} 

只是通知()這工作使用std ::排序和std ::唯一的()。

的錯誤是:

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h: In function 'typename std::iterator_traits<_Iterator>::difference_type std::count(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator<Sommet*, std::vector<Sommet, std::allocator<Sommet> > >, _Tp = __gnu_cxx::__normal_iterator<Sommet*, std::vector<Sommet, std::allocator<Sommet> > >]': 
Graphe.cpp:43: instantiated from here 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_algo.h:422: error: no match for 'operator==' in '__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Sommet*, _Container = std::vector<Sommet, std::allocator<Sommet> >]() == __value' 
Sommet.h:7: note: candidates are: bool operator==(const Sommet&, const Sommet&) 

謝謝!

編輯

我這是怎麼使用的std ::計數():

for(vector<Sommet>::iterator iter = m_sommets.begin(); 
     iter != s_iter_end; iter++) 
    { 
    iter->SetNbSuccesseurs(count(m_sommets.begin(), m_sommets.end(), iter)); 
    } 
+6

請記住,您可以執行'return left.m_id_sommet GManNickG 2009-10-10 22:04:10

+0

與GMan同意,做虛假的「if」是一種糟糕的編碼習慣。 – rlbond 2009-10-10 23:27:53

+0

的確,下次會做! – 2009-10-18 12:02:54

回答

2

看起來你正在傳入一個迭代器作爲std::count的最後一個參數,而你需要傳遞一個值(通過const ref erence)。

帖子編輯:它看起來像我是正確的,你通過iter這是一個迭代器。您需要先解除引用。請嘗試通過*iter

+0

Byyy的方式:p非常感謝:) – 2009-10-10 22:03:47

2

你需要傳遞給count什麼是價值,而不是一個迭代器:

iter->SetNbSuccesseurs(count(m_sommets.begin(), m_sommets.end(), *iter));