我做的事情很醜陋,但仍然有似乎有什麼東西似乎是一個錯誤..C++/CLI:解讀「VOID」爲「無效」
我有一個enum
稱爲這是寫在BasicTypeID
C#:
public enum BasicTypeID
{
//..
FUNCTION,
VOID,
FLOAT,
// ..
}
正如我嘗試將值分配給在位置BasicTypeID數組元素:: VOID這樣的:
typedef struct TypeInfo {
char * name;
unsigned char size;
unsigned char sign;
unsigned char real;
} TypeInfo;
static const TypeInfo TYPE_VOID = { "void", 0, 0, 0 };
static TypeInfo const **basic_type_info;
CDLLEXPORT void CLIParser_InitializeDebugInformation(char * source_folder_path, char * cdb_file_path)
{
// ..
int enum_size = Enum::GetNames(BasicTypeID::typeid)->Length;
*basic_type_info = new TypeInfo[enum_size];
basic_type_info[(int)BasicTypeID::VOID] = &TYPE_VOID; // Compile error
VOID *dummy1;
FLOAT dummy2;
// ..
}
我收到的錯誤:
error C2589: 'void' : illegal token on right side of '::'
error C2059: syntax error : '::'
,而這是工作,如果我使用例如FUNCTION
爲索引:
basic_type_info[(int)BasicTypeID::FUNCTION] = &TYPE_VOID; // Compiles without errors
它也工作FLOAT
:
basic_type_info[(int)BasicTypeID::FLOAT] = &TYPE_VOID; // Compiles without errors
這究竟是爲什麼?
@ T.C .:是的,可移植性,以防Windows被移植到一個平臺,VOID應該被定義爲不同的;-)。 – rodrigo
@rodrigo我認爲這是所有C編譯器一致支持'void'之前的時間。然後向後兼容性使它無法取出。 –
那麼你的代碼中定義了FUNCTION和VOID在哪裏? – cup