2012-04-11 82 views
0
#include "boost/date_time/gregorian/gregorian.hpp" 

int main() 
{ 
    boost::gregorian::greg_weekday dWeek(boost::date_time::Wednesday); 

    //Code One 
    // warning C4482: nonstandard extension used: enum 'boost::date_time::weekdays' used in qualified name 
    if (dWeek.as_enum()==boost::gregorian::greg_weekday::weekday_enum::Wednesday) 
    { 
     std::cout << "Today is Wednesday" << std::endl; 
    } 

    //class BOOST_DATE_TIME_DECL greg_weekday : public greg_weekday_rep { 
    //public: 
    // typedef boost::date_time::weekdays weekday_enum; 

    //Code Two 
    if (dWeek.as_enum()==boost::date_time::Wednesday) 
    { 
     std::cout << "Today is Wednesday" << std::endl; 
    } 
} 

問題的枚舉項正確方法>我已經看到了使用一個代碼boost::date_time比較萬噸的代碼。基於C++標準,枚舉的用法不正確。我提供了一個解決方案代碼二指`的boost :: date_time`

有人能給我快看,看看它是否是正確的比較方式嗎?

謝謝

回答

1

編輯:校正

使用

boost::date_time::Wednesday 

我沒看什麼類型的as_enum()返回。修正了它,編譯&作品(在MSVC2k10上,Boost 1.48.0自建)

編輯2:你會發現它被埋藏在boost/date_time/gregorian/greg_facet.hpp裏面。

namespace boost{ 
namespace gregorian{ 
    typedef boost::date_time::weekdays weekday_enum; 
} 
} 

反正對信息的其餘部分相關的部分是,有一個boost :: date_time的::平日::週三,但我們拿出平日。

枚舉基本上是這樣的:

enum foo { bar = 1, barre = 2, barred = 3 }; 
// Is sort-of the same as 
typedef static const int foo; 
foo bar = 1; 
foo barre = 2; 
foo barred = 3; 

foo是不是一個命名空間,也不是一個結構或類似的東西,它更是一個類型名的。

我知道這不是正好是一樣的,但它也可能是爲了使用它們的目的。使用類型一樣,基本上是讓編譯器的垃圾一點點解析裏面的weekday_enum預選賽中,這好像是說:

typedef int foo; 
struct S { 
    static foo var; 
} p; 

p.foo::var = 4; // Does this make sense? Nope... 
+0

號的boost ::陽曆:: greg_weekday ::週三會導致錯誤C2039:「週三':不是'boost :: gregorian :: greg_weekday' – q0987 2012-04-11 15:43:03

+0

@ q0987的成員抱歉,我的錯,修復了它。我沒有檢查返回什麼類型的as_enum()。 – 2012-04-11 16:13:22

相關問題