在具有方面根據here,你應該能夠使用Card::TEN
,而不是答案的一種類型Card::Rank::TEN
,只要你申報你的enum
這樣的:
class Card
{
public:
enum Rank { TWO = 2, THREE = 3, FOUR = 4, FIVE = 5, SIX = 6, SEVEN = 7,
EIGHT = 8, NINE = 9, TEN = 10, JACK = 10,
QUEEN = 10, KING = 10, ACE = 11 };
不能使用兩個無論如何,switch
聲明中的值相同。這是因爲當代碼運行並且您獲得值10
時,您的代碼將無法確定它是否爲十,Jack,Queen或King。
請更改這些值或僅在交換機中使用其中的一個值。這是一個人爲的例子:
int function(int value)
{
int rv = 0;
switch (value)
{
case 0:
rv = 7;
break;
case 1:
rv = 8;
break;
case 1:
rv = 21;
break;
default:
rv = 0;
break;
}
return rv;
}
int main()
{
printf("What does function(1) return? %d", function(1));
return 0;
}
這是沒有意義的,因爲我們返回兩個不同的值,當我們傳遞的價值1
所以編譯器不允許這樣做。
這是相同的,如果你使用的Card::Rank::TEN
你enum
值開關,因爲他們值相同的編譯器不允許它。
Card::Rank card = Card::Rank::TEN;
switch(card)
{
// Some cases...
case Card::Rank::JACK:
// Do something
break;
case Card::Rank::TEN: // <- not allowed since it is the same as the case for Card::Rank::JACK.
// Do something else
break;
// Some more cases...
}
這是不允許的。下面看起來像應該是好的,因爲編譯器應該能夠看到它是兩個情況下運行相同的代碼,但它仍然不會工作。
switch(card)
{
// Some cases...
case Card::Rank::JACK:
case Card::Rank::TEN: // <- still not allowed, even though both code paths for case 10 do the same thing...
// Do something else
break;
// Some more cases...
}
,我很抱歉,但我不能給好推理除此之外,它可能不是標準本身的一致性允許的。其他人可能可以詳細說明這一點。
請出示不編譯的一部分,否則我們最終可能會幫助你解決一個錯誤的問題。 – dasblinkenlight
注意:這是否是二十一點? Ace's也可以是1。 – Coderchu