2017-07-18 91 views
0

我給列表迭代器指針和列表指針函數。但是我得到的錯誤:傳遞列表列表迭代器作爲指針C++

error: no matching function for call to ‘SignalGrouper::DoesPeriodExist(std::__cxx11::list<wSignal>*, std::__cxx11::list<wSignal>::iterator&)’ 
    if((DoesPeriodExist(&donePeriods,it2)==false) && it2->dTime < maxPeriod && it2->dTime > minPeriod) 

函數調用指針函數:

std::list<std::list<wSignal>> SignalGrouper::groupByPeriod (std::list<wSignal> signals, int secs) 
{ 
    std::list<std::list<wSignal>> groupedSignals; 
    std::list<wSignal> donePeriods; 
    for (std::list<wSignal>::iterator it1=signals.begin(); it1 != signals.end(); ++it1) 
    { 
     if(DoesPeriodExist(&donePeriods,it1)==false) //check if period is already been grouped 
     { 
      boost::posix_time::ptime maxPeriod = boost::posix_time::ptime(it1->dTime); 
      boost::posix_time::ptime minPeriod = boost::posix_time::ptime(it1->dTime); 
      maxPeriod += boost::posix_time::seconds(secs/2); 
      minPeriod -= boost::posix_time::seconds(secs/2); 
      std::list<wSignal> oneSignalPeriod; 
      for (std::list<wSignal>::iterator it2=signals.begin(); it2 != signals.end(); ++it2) 
      { 
       if((DoesPeriodExist(&donePeriods,it2)==false) && it2->dTime < maxPeriod && it2->dTime > minPeriod) //check if period is already been grouped 
       { 
        oneSignalPeriod.push_back(*it2); 
        donePeriods.push_back(*it2); 
       } 
      } 
      groupedSignals.push_back(oneSignalPeriod); 
     } 
    } 
    return groupedSignals; 
} 

指針功能:

bool SignalGrouper::DoesPeriodExist (std::list<wSignal>* signals, wSignal* s) 
{ 
    for (std::list<wSignal>::iterator it1=signals->begin(); it1 != signals->end(); ++it1) 
    { 
     if((it1->apNr == s->apNr) && (it1->MAC == s->MAC) && (it1->RSSI == s->RSSI) && (it1->dTime == s->dTime)) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

我在做什麼錯。我如何使用指針函數指針?

+2

你是如何通過指針傳遞的?通過引用傳遞會使語法變得更加簡單。 – NathanOliver

+1

由於錯誤提示您正在嘗試將* iterator *而不是* pointer *作爲第二個參數。 –

回答

2

您呼叫的函數簽名

bool SignalGrouper::DoesPeriodExist (std::list<wSignal>* signals, wSignal* s) 

,但在這條線

DoesPeriodExist(&donePeriods,it1) 

你路過它

DoesPeriodExist (std::list<wSignal>* signals, std::list<wSignal>::iterator s) 

要傳遞正確的類型,你可以說

DoesPeriodExist(&donePeriods, &(*it1))