我有一個包含所有列舉的枚舉的頭文件(#ifndef #define #endif構造已用於避免多個包含文件),我在我的應用程序中使用了多個cpp文件。這些文件中的枚舉的是將枚舉傳遞給C++中的函數
enum StatusSubsystem {ENABLED,INCORRECT_FRAME,INVALID_DATA,DISABLED};
還有時,我調用上面的函數一樣
delcared作爲ShowStatus(const StatusSubsystem&);
在應用較早的應用功能
我的應用程序用於完美編譯。但是,加入一些代碼後,編譯暫停給予以下錯誤:
File.cpp:71: error: invalid conversion from `int' to `StatusSubsystem'
File.cpp:71: error: initializing argument 1 of `void Class::ShowStatus(const StatusSubsystem&)
我檢查的代碼,任何衝突枚舉在新的代碼,它看起來很好。
我的問題是編譯器顯示爲錯誤的函數調用有什麼問題?
供您參考函數的定義是:
void Class::ShowStatus(const StatusSubsystem& eStatus)
{
QPalette palette;
mStatus=eStatus;//store current Communication status of system
if(eStatus==DISABLED)
{
//select red color for label, if it is to be shown disabled
palette.setColor(QPalette::Window,QColor(Qt::red));
mLabel->setText("SYSTEM");
}
else if(eStatus==ENABLED)
{
//select green color for label,if it is to be shown enabled
palette.setColor(QPalette::Window,QColor(Qt::green));
mLabel->setText("SYSTEM");
}
else if(eStatus==INCORRECT_FRAME)
{
//select yellow color for label,to show that it is sending incorrect frames
palette.setColor(QPalette::Window,QColor(Qt::yellow));
mLabel->setText("SYSTEM(I)");
}
//Set the color on the Label
mLabel->setPalette(palette);
}
的這種情況的一個奇怪的副作用是編譯的時候是我投的所有調用ShowStatus()作爲
ShowStatus((StatusSubsystem)INCORRECT_FRAME);
雖然這消除任何編譯錯誤,但會發生一件奇怪的事情。儘管我在上面調用了INCORRECT_FRAME,但是在函數定義中它與ENABLED匹配。這究竟有多可能?它就像通過引用傳遞INCORRECT_FRAME一樣,它神奇地轉換爲ENABLED,這應該是不可能的。這讓我瘋狂。
你能在我的工作中發現任何缺陷嗎?或者是別的什麼?
該應用程序是在RHEL4上使用C++ Qt-4.2.1編寫的。
謝謝。
+1,但我相信通過const引用接受應該仍然有效。但如果能解決這個問題,我不會感到驚訝。誰知道GCC在RHEL4上的年齡? – rlbond 2010-04-13 05:25:21
@rlbond:我認爲const引用也可以工作......請參閱OP有關它有時如何工作,有時不工作的評論。這就是我後來相信一些其他代碼'#define''INCORRECT_FRAME'的新值。 – 2010-04-13 05:28:52
@ribond,RHEL 4上的gcc版本是3.4.3 :) – rocknroll 2010-04-13 05:30:52