C++ 筆記:OPERATOR::AND is not an aggregate type |
2006/02/22 ~ 阿亮 ~ |
最近在用 enum 時,遇到一個問題,如下:
class A{public:enum OPERATOR{AND=0,OR};
dosomething(int type=OPERATOR::AND);
}
這段在 VC7.1 編譯得過,但在 gcc 下就不會過了,就會呈現 ‘OPERATOR::AND’ is not an aggregate type 的錯誤訊息了,網路上查一下得知,
Enumerators are names in the same scope where the enumeration type is declared.
所以,必需寫成如下:
class A
{
public:
enum OPERATOR
{
AND=0,
OR
};
dosomething(int type=A::AND);
}
這樣在兩個平台就都可以編譯了,但真是傷腦筋了,我倒覺得 VC7.1 的用法比較 Make Sense 哩!! 比如我想用兩組 enum type,而其中的成員命名一樣? 這要怎樣用?
class A
{
public:
enum OPERATOR
{
DISABLE=0,
ENABLE
};
enum SEARCH
{
DISABLE=0,
EXACT,
LOCAL_OPTIMIZE
};
dosomething(int search_type=A::DISABLE);
}
目前我只知道在 class 外的 enum 宣告,可以用 namespace 的方式來達到此目的,比如
namespace Sense{
enum SenseType
{
Vision, Hearing, Touch, Smell
};
}
就可以用 Sense::Vision 等..
但 class 內? 目前我還不知道,還沒有這個需要 ^_^ 有需要再研究。