2016-04-21 7 views
0

Ich spiele gerade mit boost::date_time herum. Dabei stieß ich auf die Funktion days_until_weekday (documentation link), die mir sehr nützlich erscheint. Leider erhalte ich einen Kompilierung Fehler aus dem Snippet folgendenKompilierfehler für boost :: date_time :: days_until_weekday

date f(date d){ 
    return next_weekday(d, boost::date_time::weekdays::Friday); 
} 

Lese

> In file included from 
> /usr/include/boost/date_time/gregorian/gregorian_types.hpp:25:0, 
>     from /usr/include/boost/date_time/posix_time/posix_time_config.hpp:18, 
>     from /usr/include/boost/date_time/posix_time/posix_time_system.hpp:13, 
>     from /usr/include/boost/date_time/posix_time/ptime.hpp:12, 
>     from /usr/include/boost/date_time/posix_time/posix_time.hpp:15, 
>     from prog.cpp:3: /usr/include/boost/date_time/date_generators.hpp: In instantiation of 
> 'typename date_type::duration_type 
> boost::date_time::days_until_weekday(const date_type&, const 
> weekday_type&) [with date_type = boost::gregorian::date; weekday_type 
> = boost::date_time::weekdays; typename date_type::duration_type = boost::gregorian::date_duration]': 
> /usr/include/boost/date_time/date_generators.hpp:488:34: required 
> from 'date_type boost::date_time::next_weekday(const date_type&, const 
> weekday_type&) [with date_type = boost::gregorian::date; weekday_type 
> = boost::date_time::weekdays]' prog.cpp:11:67: required from here /usr/include/boost/date_time/date_generators.hpp:452:37: error: 
> request for member 'as_number' in 'wd', which is of non-class type 
> 'const boost::date_time::weekdays' 
>  duration_type dd(wd.as_number() - d.day_of_week().as_number()); 

Go here für eine Paste aus meinem Code.

Da das Schnipsel, das den Fehler verursacht, so kurz ist, habe ich wirklich keine Ideen, um das zu beheben.

Übrigens bin ich auf Boost 1.60.0 mit clang 3.7.0.

+0

Solange Sie die Reifen von Datum/Zeit-Libs sind Tritte, hier ist ein auf der Basis der C++ 11 chrono: https: // Github .com/HowardHinnant/date Die Syntax für dieselbe Operation ist 'return d + (Datum :: fr - Datum :: Wochentag {d});'. Der vorherige Freitag würde wie folgt aussehen: return d - (date :: wochentag {d} - date :: fri); '. –

Antwort

1

Sie müssen die Enumeration date_time in ein Objekt konvertieren, das mit der Schnittstelle übereinstimmt, die von dem an die Funktion übergebenen weekday_type erwartet wird. Verwenden Sie die greg_weekday Funktion zu tun dies für Sie, zum Beispiel:

return next_weekday(d, boost::gregorian::greg_weekday(boost::date_time::Friday)); 

Das ist für mich unter VS2015 kompiliert und steigern 1,53.

Ein Link zur Dokumentation für diese Funktion: greg_weekday

Verwandte Themen