gpt4 book ai didi

c++ - 将枚举传递给 C++ 中的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:00 26 4
gpt4 key购买 nike

我有一个头文件,其中列出了所有枚举(#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,这应该是不可能的。这让我抓狂。

你能发现我所做的任何缺陷吗?还是其他原因?

该应用程序是在 RHEL4 上使用 C++、Qt-4.2.1 制作的。

谢谢。

最佳答案

您应该按值获取枚举,而不是按常量引用。它足够小,可以放入 int 中,因此不会造成性能损失或类似情况。

但是,根据您的描述,听起来有人在其他地方将 #defined INCORRECT_FRAME 设置为 0。您应该在其上方的行中放置类似以下内容:

#ifdef INCORRECT_FRAME
#error Whoops, INCORRECT_FRAME already defined!
#endif

顺便说一句,#ifndef 东西(对于您的头文件)称为 include guard . :-)

关于c++ - 将枚举传递给 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2627134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com