为啥编译器告诉我没有运算符与我的“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”语句中的操作数类型匹配?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 java 编译器级别与我安装的项目方面不匹配?

为啥 Flutter 编译器告诉我我的应用程序不存在?

为啥我的 Xcode 编译器告诉我我使用了值类型,即使我使用了类?

为啥 Game Maker Studio 告诉我我的 if 语句不起作用?

为啥我应该将我的域实体与我的表示层隔离?

为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?