2011-07-11 153 views
0

我是C的新手,我一直在閱讀一本題爲「簡單步驟中的C編程」的書中的概念和示例代碼。從int到main():: colors的轉換無效?

所以,我在此示例程序,字符字符鍵入:

#include <stdio.h> 
int main() 
{ 
    /* declare a sequence of constants */ 
    enum colors 
    { RED=1,YELLOW,GREEN,BROWN,BLUE,PINK,BLACK }; 

    /* Declare a variable of the enumerated data type */ 

    enum colors fingers; 

    /* assign valid constants from the colors list */ 
    /* -----THIS IS THE ERROR LINE BELOW---------- */ 

    fingers = (enum colors) PINK + BROWN; 


    /*-display the value in the variable */ 
    printf("Value: %d\n", fingers); 

    return 0; 
} 

,我得到這個錯誤:

13 C:\Users\mjohearn\Documents\pet projects\constant types NOT WORKING\enumtypes.cpp invalid conversion from `int' to `main()::colors' 

出於某種原因,編譯器無法識別fingers

如果有人能幫我解決這個問題,我會很感激。

+5

哦,我可以感受到答案浪潮...... – Ulterior

+1

C文件擴展名是「.c」。 「.cpp」用於C++。 (你也想用C編譯器,而不是C++編譯器來編譯C)。 – geoffspear

+0

PINK + BROWN = 10不在列表中。而且,你是否需要鍵入PINK + BROWN? –

回答

1

嘗試

fingers = (enum colors) (PINK + BROWN) ; 

我相信投操作的優先級比加法運算更緊密。

+0

謝謝:)我馬上試試。 –

+0

對!那就是訣竅。這是因爲「C」編譯器的新標準嗎?我的文本的日期是2002-2004。 –

+0

沒有。從那以後一直如此。以下是C/C++運算符優先級圖表 - http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence - 按優先級降序排列,以及它們是左或右關聯。另外......正如@mingos指出的那樣,將兩個枚舉值加在一起並沒有任何意義。如果您想學習C語言,請獲取Kernighan&Ritchie's * C編程語言*的副本,然後獲取Harbison&Steele的* C:參考手冊*的副本。 K + R是有史以來最好的(如果不是最好的)編程文本之一。 –

相關問題