【问题标题】:passing list en list iterator as pointer c++将列表和列表迭代器作为指针传递 C++
【发布时间】:2017-12-23 06:39:31
【问题描述】:

我给出了一个列表迭代器指针和一个指向函数的列表指针。但是我得到了错误:

 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;
}

我做错了什么。指针函数如何使用?

【问题讨论】:

  • 你怎么会通过指针?通过引用传递使语法更容易。
  • 正如错误所说,您正在尝试传递 iterator 而不是 pointer 作为第二个参数。

标签: c++ list function pointers iterator


【解决方案1】:

你调用的函数有签名

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))

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 2015-03-27
    • 2021-07-12
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多