cmc*_*123 4 c++ enums compiler-errors visual-studio-2019
我是 C++ 新手,我想知道是否有人可以帮助我理解为什么
enum difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = EASY
Run Code Online (Sandbox Code Playgroud)
和
enum shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
Run Code Online (Sandbox Code Playgroud)
有绿色下划线吗?它说它更喜欢枚举类,但是当我将其更改为枚举类时
enum class difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = EASY;
enum class shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
Run Code Online (Sandbox Code Playgroud)
EASY 变为红色下划线,myShipCost 变为绿色下划线,BOMBER_COST 变为红色下划线,CRUISER_COST 变为红色下划线
const int ALIEN_POINTS = 150;
int aliensKilled = 10;
int score = aliensKilled * ALIEN_POINTS;
cout << "score: " << score << endl;
enum difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDifficulty = EASY;
enum shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
cout << "\nTo upgrade my ship to a cruiser will cost "
<< (CRUISER_COST - myShipCost) << " Resource Points.\n";
system("pause");
return 0;
Run Code Online (Sandbox Code Playgroud)
enum class difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = difficulty::EASY;
enum class shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = shipCost::BOMBER_COST;
Run Code Online (Sandbox Code Playgroud)
使用enum class
,删除了与整数的隐式转换,并且您必须确定其中常量的范围。
这被认为是一种改进。显式地将其转换回整数仍然有效,但这并不是偶然发生的。
std::cout << "\nTo upgrade my ship to a cruiser will cost "
<< (static_cast<int>(shipCost::CRUISER_COST) - static_cast<int>(myShipCost)) <<
" Resource Points.\n";
system("pause");
return 0;
Run Code Online (Sandbox Code Playgroud)
一旦你使用enum class
,你应该重命名它们:
enum class difficulty { novice, easy, normal, hard, unbeatable };
difficulty myDiffiuclty = difficulty::easy;
enum class shipCost { fighter =25, bomber=30, cruiser = 50 };
shipCost myShipCost = shipCost::bomber;
Run Code Online (Sandbox Code Playgroud)
由于ship
名称的一部分现在位于 中enum
,因此无需在常量中重复它。同样,由于名称是有范围的,因此您不必使用SHOUT
它们。
但请注意,如果您只是使用它来创建常量而不打算创建类型,请考虑使用类似以下内容的内容:
namespace ship {
namespace cost {
constexpr int fighter = 25;
constexpr int bomber = 30;
constexpr int cruiser = 50;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们有ship::cost::fighter
一个编译时计算的 an int
,而不是一个enum class
。