为啥编译器告诉我没有运算符与我的“if”和“else if”语句中的操作数类型匹配?
Posted
技术标签:
【中文标题】为啥编译器告诉我没有运算符与我的“if”和“else if”语句中的操作数类型匹配?【英文标题】:Why does the compiler tell me that no operators match the operand type in my 'if' and 'else if' statements?为什么编译器告诉我没有运算符与我的“if”和“else if”语句中的操作数类型匹配? 【发布时间】:2020-09-15 18:11:36 【问题描述】:这段代码有什么问题?我一直在尝试,但我不知道为什么我不能在if
语句中使用=
或==
。
#include <vector>
#include <cstdlib>
#include <time.h>
using namespace std;
/* I am trying to make the program output a periodic t symbol
so then it asks the user what the element is */
void symbols(std::vector<std::string> alcalinos)
alcalinos = "H", "Li", "Na", "K", "Rb", "Cs", "Fr" ;
std::string elemento;
cout << "Introduce el elemento correspondiente al símbolo(en minusculas) : \n";
srand(time(NULL));
int random = rand() % 7;
cout << alcalinos[random];
cin >> elemento;
if ((alcalinos = "H") && (elemento = "hidrogeno"))
cout << "correcto\n";
else if ((alcalinos = "Li") && (elemento = "litio"))
cout << "correcto\n";
else if ((alcalinos = "Na") && (elemento = "sodio"))
cout << "correcto\n";
else if ((alcalinos = "K") && (elemento = "potasio"))
cout << "correcto\n";
else if ((alcalinos = "Rb") && (elemento = "rubidio"))
cout << "correcto\n";
else if ((alcalinos = "Cs") && (elemento = "cesio"))
cout << "correcto\n";
else if ((alcalinos = "Fr") && (elemento = "francio"))
cout << "correcto\n";
else
cout << "incorrecto\n";
int main();
void symbols();
【问题讨论】:
你不能使用=
或==
(==
是正确的)因为alcalinos
是一个向量,你不能测试一个向量是否等于一个字符串。
这个问题是一个完全合理的问题 - 但请确保将来正确格式化您的代码;它不仅可以帮助他人,还可以帮助您发现明显的愚蠢错误。
记住:一个=
用于分配,两个用于比较:==
。
【参考方案1】:
我一定心情不错,我已经加了cmets来指出你犯的错误
void symbols() // no parameter for function
// local declaration of vector instead of parameter
std::vector<std::string> alcalinos = "H", "Li", "Na", "K", "Rb", "Cs", "Fr" ;
std::string elemento;
cout << "Introduce el elemento correspondiente al símbolo(en minusculas) : \n";
int random = rand() % 7;
cout << alcalinos[random];
cin >> elemento;
// compare alcalinos[random] not alcalinos
// use == not =
if ((alcalinos[random] == "H") && (elemento == "hidrogeno"))
cout << "correcto\n";
else if ((alcalinos[random] == "Li") && (elemento == "litio"))
cout << "correcto\n";
else
cout << "incorrecto\n";
// missing
int main() // no ; after main()
srand(time(NULL)); // seed RNG once in main
symbols(); // no void before function call
当你犯了这么多错误时,这意味着你试图一次编写太多代码。当您是初学者时,一次添加一行代码。并在您添加的每一行之后测试代码。这样一来,您只能尝试一次解决一个问题。你会发现这样更容易。
【讨论】:
非常感谢约翰。正如你所说,我是一个初学者,我试图在学校制作一个很酷的程序来学习元素周期表,我不知道我犯了这么多错误。我很惊讶,虽然我开始学习才几天,我实际上已经 13 岁了。我真的很感激像你这样的人帮助像我这样的初学者。谢谢你帮助我。以上是关于为啥编译器告诉我没有运算符与我的“if”和“else if”语句中的操作数类型匹配?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Xcode 编译器告诉我我使用了值类型,即使我使用了类?