在这段代码中,toPurchase
在使用player->giveOptions()
(返回一个整数,而不是布尔值)初始化时,从整数转换为bool,非常接近此代码的末尾。之后,有一个switch(toPurchase)
,然后编译器说它不起作用,因为toPurchase
已经转换为bool。为什么呢?
int loc = player->giveOptions(4,"Trainers","Market","Inn","Back","");
int chos;
bool success = true;
bool toPurchase = false;
switch(loc){
case 1:
text.push_back("Hello, "+player->name+".");
if (player->firstTrainerVisit){
text.push_back("I'm not sure if anyone's told you, but there's been some strange talk about you lately...");
text.push_back("Hmm... A lot of people are scared of you.");
text.push_back("Anyway, nice to meet you. I'm Yobbee, the village trainer.");
text.push_back("You'll need training up before meeting the village elders.");
text.push_back("Usually, you need to pay to get trained by me, but as a first time bonus I'll teach you for free.");
text.push_back("After you've been trained, you get a skill point, which you can use to increase one of your abilities.");
}
text.push_back("Would you like to be trained today?");
NPCTalk("Yobbee (Trainer)",text);
text.clear();
chos = player->giveOptions(2,"Yes","No","","","");
switch(chos){
case 1:
if(!player->firstTrainerVisit){
cout << "This will cost 10 gold. Continue?" << endl;
int purchase = player->giveOptions(2,"Yes","No","","","");
if(purchase)
success = player->spendGold(5);
else
success = false;
}
if (success){
player->awardStat(1,"sp");
cout << "After a day of vigorous training, you find your skills honed." << endl;
}else{
cout << "You don't have enough gold!" << endl;
}
if(player->firstTrainerVisit&&success){
text.push_back("You can use your skill point to increase one of your stats by typing 'sp' any time you are given a choice.");
text.push_back("There are other commands you can use at any choice opportunity as well - just type 'help' to see this one and others.");
NPCTalk("Yobbee (Trainer)",text);
text.clear();
player->firstTrainerVisit = false;
}
break;
case 2:
break;
}
cout << "\nBack to the entrance to Poglathon..." << endl;
system("PAUSE");
Poglathon(text,player);
break;
case 2:
if(player->firstMarketVisit){
text.push_back("Oh... Hello, "+player->name+".");
text.push_back("Ignore other people's looks. You'll find out about all this when you meet the Elders.");
if(!player->firstElderVisit) text.push_back("Oh, you have already? Then I don't feel guilty about not explaining.");
text.push_back("Here, at the market, you can buy new equipment for your travels, such as food, weapons and armour.");
text.push_back("You don't have any gold at the moment, but as a standard first-time visit we will issue you with some leather armour and a rusty dagger.");
text.push_back("Not the best of items, but it'll certainly help!");
text.push_back("The weapon and armour are now in your backpack. To equip items in your backpack, when you are given an option type 'backpack'.");
player->addToBackpackIfSpace("Rusty dagger");
player->addToBackpackIfSpace("Leather armour");
NPCTalk("Market Manager",text);
text.clear();
player->firstMarketVisit = false;
}
cout << "Do you want to purchase anything at the market?" << endl;
toPurchase = player->giveOptions(2,"Yes","No","","","");
switch(toPurchase){
case 1:
cout << "You can't purchase anything yet. NOOB" << endl;
break;
case 2:
break;
}
cout << "\nBack to the entrance to Poglathon..." << endl;
system("PAUSE");
Poglathon(text,player);
break;
}
答案 0 :(得分:2)
只需更改此代码:
switch(toPurchase){
case 1:
cout << "You can't purchase anything yet. NOOB" << endl;
break;
case 2:
break;
}
为:
if (toPurchase)
{
cout << "You can't purchase anything yet. NOOB" << endl;
}
答案 1 :(得分:2)
你打开toPurchase
,实际上是boolean(在第4行声明为boolean)
答案 2 :(得分:0)
C ++是一种静态类型语言。你已经将toPurchase声明为bool变量,所以它会保持bool直到你猛烈地施放到其他东西。但不建议手动浇铸。
虽然,int可以隐式地转换为bool,这发生在
toPurchase = player->giveOptions(2,"Yes","No","","","");
此值赋值不会像在php中那样更改toPurchase的类型。它将giveOptions的返回值强制转换为bool,并将该转换的bool值赋给Purchase。