У меня есть заголовочный файл со всеми перечисленными перечислениями (используется конструкция #ifndef #define #endif, чтобы избежать многократного включения файла), который я использую в нескольких файлах cpp в моем приложении. Один из перечислений в файлах это
enum StatusSubsystem {ENABLED,INCORRECT_FRAME,INVALID_DATA,DISABLED};
В приложении есть функции, помеченные как
ShowStatus(const StatusSubsystem&);
Ранее в приложении, когда я делал вызовы вышеупомянутой функции, как
ShowStatus(INCORRECT_FRAME);
мое приложение отлично компилировалось. Но после добавления некоторого кода компиляция останавливается, выдавая следующую ошибку:
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, что должно быть невозможно. Это сводит меня с ума.
Можете ли вы найти какой-либо недостаток в том, что я делаю? или это что-то еще?
Приложение выполнено с использованием C ++, Qt-4.2.1 на RHEL4.
Спасибо.