error: could not convert

0

Good morning! I try to make an operations program with structs, however when I try to compile it marks the error:

error: could not convert 'e.buscarElemento()::Encontrar::nombre.std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=<char, std::char_traits<char>, std::allocator<char> >(alumnos[p].Alumno::nombres)' from 'std::__cxx11::basic_string<char>' to 'bool'|

The code is as follows:

#include <iostream>

using namespace std;

struct Alumno

{
    string nombres="";
    string apellidos="";
    int edad=0;
    float estatura=0.0;
    bool activo=0;
};
Alumno alumnos[2];

void mostrarDatos()
{
    for(int p=0;p<2;p++)
{
    cout<<"Nombre(s): "<<alumnos[p].nombres<<endl;
    cout<<"Apellidos: "<<alumnos[p].apellidos<<endl;
    cout<<"Edad: "<<alumnos[p].edad<<endl;
    cout<<"Estaturta: "<<alumnos[p].estatura<<endl;
    if(alumnos[p].activo)
        {
            cout<<"Tu status es ACTIVO"<<endl;
        }
    else
        {
            cout<<"Tu status es INACTIVO"<<endl;
        }
    }
}

void capturarDatos()
{
    for(int p=0;p<2;p++)
        {
            cout<<"Introduce tu nombre(s)"<<endl;
            cin.ignore();
            getline(cin,alumnos[p].nombres);
            cout<<"Introduce tus apellidos"<<endl;
            cin.ignore();
            getline(cin,alumnos[p].apellidos);
            cout<<"Introduce tu edad"<<endl;
            cin>>alumnos[p].edad;
            cout<<"Introduce tu estatura"<<endl;
            cin>>alumnos[p].estatura;
            cout<<"¿Estas activo?"<<endl;
            cout<<"En caso de que tu respuesta sea afirmativa introduce un 1"<<endl;
            cout<<"En caso de que tu respuesta sea negativa introduce un 0"<<endl;
            cin>>alumnos[p].activo;
        }
}

void buscarElemento()
{
    struct Encontrar
    {
        string nombre="";
    };
    Encontrar e;
    int td;
    bool valorEncontrado=false;
    cout<<"Que clase de dato desea buscar"<<endl;
    cout<<"1 Nombres"<<endl;
    cout<<"2 Apellidos"<<endl;
    cout<<"3 Edad"<<endl;
    cout<<"4 Estatura"<<endl;
    cout<<"5 Activo"<<endl;
    cin>>td;
    switch(td)
    {
    case 1:
        cout<<"¿Que nombre desea buscar?"<<endl;
        cin.ignore();
        getline(cin,e.nombre);
        for(int p=0;p<2;p++)
            if(e.nombre=alumnos[p].nombres)
        {
            valorEncontrado=true;
            cout<<"Se encontro a: "<<e.nombre[20]<<" en la posicion "<<p<<endl;
        }
        if(valorEncontrado=false)
        {
            cout<<"No se encontro el dato"<<endl;
        }
    }
}

int main()
{
    int op;
    do{
    cout<<"Menu:"<<endl;
    cout<<"0 Salir"<<endl;
    cout<<"1 Llenar arreglo"<<endl;
    cout<<"2 Buscar elemento por alguno de los datos"<<endl;
    cout<<"3 Mostrar elementos"<<endl;
    cout<<"Elige una opcion"<<endl;
    cin>>op;
    switch(op)
    {
    case 0:
        break;
    case 1:
        capturarDatos();
        break;
    case 2:
        break;
    case 3:
        mostrarDatos();
        break;
    }
    }while(op!=0);
    return 0;
}

The error belongs to the line:

if(e.nombre=alumnos[p].nombres)

I would like you to explain to me the error and, if possible, how to solve it; in advance, thank you.

    
asked by dannaobelana 23.11.2017 в 14:27
source

1 answer

1

The error is telling you that it is not able to convert to bool . In effect, note that you are making an assignment instead of a comparison.

if(e.nombre=alumnos[p].nombres)
//         ^

Quick solution: Change the assignment for a comparison

if(e.nombre==alumnos[p].nombres)
//         ^^

Recommended solution: apart from applying the previous point, delete the Encontrar structure that does not contribute anything in that code:

// Quitar esto:
struct Encontrar
{
  string nombre="";
};
Encontrar e;

// y poner esto:
string nombre; // Nota que no hace falta inicializarlo ... es una clase

and, of course, replace all occurrences of e.nombre to nombre .

    
answered by 23.11.2017 / 15:17
source