我对c ++很新。作为一个项目,我正在重写我在python中编写的一个小游戏(我从来没有让它正常工作)。在编译期间,我收到此错误:错误:不匹配'operator - ='
我知道这个运算符存在于c ++中,为什么我会收到此错误?
代码:
void rpg() {
cout << "This mode is not yet complete. It only contains a dungeon so far. I'm still working on the rest!";
dgn();
}
void dgn() {
int whp = 100;
int mahp = 100;
int hhp = 100;
string m;
int mhp;
cout << "There are three passages. Do you take the first one, the second one, or the third one? (Give your answer in numbers)";
int psg;
cin >> psg;
switch (psg) {
case 1:
m = "Troll";
mhp = 80;
break;
case 2:
m = "Goblin";
mhp = 35;
break;
case 3:
m = "Dragon";
mhp = 120;
}
cout << "A ";
cout << m;
cout << " appears!";
dgnrd(m, mhp, whp, mahp, hhp);
}
void dgnrd(string m, string mhp, int whp, int mahp, int hhp) {
bool alive = true;
while (alive) {
string wa;
string ma;
string ha;
cout << "What does Warrior do? ";
cin >> wa;
cout << "What does Mage do? ";
cin >> ma;
cout << "What does Healer do? ";
cin >> ha;
if (wa == "flameslash") {
cout << "Warrior used Flame Slash!";
mhp -= 20;
}
else if (wa == "dragonslash" && m == "Dragon") {
cout << "Warrior used Dragon Slash!";
mhp -= 80;
}
else if (wa == "dragonslash" && (m == "Troll" || m == "Goblin")) {
cout << "Warrior's attack did no damage!";
}
if (ma == "icicledrop") {
cout << "Mage used Icicle Drop!";
mhp -= 30;
mahp -= 10;
whp -= 10;
hhp -= 10;
}
else if (ma == "flamesofhell") {
cout << "Mage used Flames of Hell!";
mhp -= 75;
mahp -= 50;
whp -= 50;
hhp -= 50;
}
else if (ma == "punch") {
cout << "Mage used Punch!";
mhp -= 5;
}
}
}
答案 0 :(得分:2)
在dgn()
中,您有
int mhp;
这是明智的,因为它是一个数字数量。
但是你的助手函数声明了
string mhp
参数列表中的,它应该导致函数调用中实际和形式参数之间的类型不匹配错误
dgnrd(m, mhp, whp, mahp, hhp);
将其修复为int& mhp
,并且会立即消除几个问题。
请注意&
创建引用。这使得函数与其调用者共享变量,以便对调用者的副本进行更改。否则(按值传递)函数内的所有更改都会在函数返回时消失。
答案 1 :(得分:1)
原因是std::string
没有运营商-=
。有+=
,它附加到现有字符串,但运算符-=
的语义不明确。
除了那个明显的问题,dgnrd
函数的参数类型与传递它的参数的类型不匹配。
答案 2 :(得分:0)
您似乎在字符串而不是int上运行 - =运算符。 mhp
是string
,因此以下语句导致编译错误:
mhp -=