如何避免已定义的seconds()方法和ptime seconds(default)方法冲突?

时间:2018-08-22 07:49:32

标签: linux c++11 boost

此处unsigned long EVTime::seconds()ptime p(d,seconds(s));冲突。如果我将ptime seconds(s)更改为分钟/小时,则可以正常工作。

如果我将seconds(s)更改为minutes(s)hours(s),则只有它可以工作。我是C ++的新手,请任何人帮助解决此冲突。

evt.cpp

unsigned long EVTime::seconds()
{
  ptime t(date(1901,Jan,1),time_duration(0,0,0));
  time_duration td = utcdatetime - t;
  return (unsigned long)td.total_seconds();
}

EVTime::EVTime(unsigned long s)
{
  date d(1901,1,1);
  ptime p(d,seconds(s));
  utcdatetime=p;
}

evt.h

class EVTime
{
public:
  EVTime(unsigned long s);
  unsigned long seconds();
  ptime utcdatetime;
};

main.cpp

int main()
{
  EVTime t(222l);
  cout<<"seconds since 1901: "<<t.seconds()<<endl;
}

错误代码:

evtime.cpp: In constructor ‘EVTime::EVTime(long unsigned int)’:
evtime.cpp:35: error: no matching function for call to ‘EVTime::seconds(long 
unsigned int&)’
evtime.cpp:14: note: candidates are: long unsigned int EVTime::seconds()

1 个答案:

答案 0 :(得分:0)

您的函数seconds()不带任何参数,但是您在调用它时将其发送给sptime p(d,seconds(s));

由于您没有匹配功能,因此会导致错误“没有匹配功能,无法调用EVTime::seconds(long unsigned int&)”。

调用ptime p(d,seconds());或更改seconds函数签名以获取参数并对其进行处理。