我有一个包含所有列举的枚举的头文件(#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