-4
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
#include <string.h>
using namespace std;


class Empleado {
    private:

        string m_nombre;
        string m_provincia;
        string m_trabajo;
        int m_ID;

    public:
        void ImprimirInfo();
        void Toma_Nombre( string nombre ) { m_nombre = nombre ;}
        void Toma_Provincia( string  provincia) { m_provincia = provincia ;}
        void Toma_Trabajo ( string trabajo ) { m_trabajo = trabajo ;}
        void Toma_ID ( int ID ) { m_ID = ID ;}
        string Dame_Nombre( ){ return m_nombre ;}
        string Dame_Provincia( ){ return m_provincia ;}
        string Dame_Trabajo( ){ return m_trabajo ;}
        int Dame_ID( ){ return m_ID ;}
};


void Empleado::ImprimirInfo( )
{
   cout << "Nombre: " << m_nombre << '\n';
   cout << "Provincia: " << m_provincia << '\n';
   cout << "Puesto: " << m_trabajo << '\n';
   cout << "Salario: " << m_ID << '\n';
}
Empleado Agregar_Nuevo()
{
    Empleado nuevo_empleado;
    string name;
    string state;
    string job;
    int identification;


    cout<<"\nIngrese su nombre: ";
    scanf("%s",&name);
    cout<<"\nIngrese su provincia: ";
    scanf("%s",&state);
    cout<<"\nIngrese su puesto: ";
    scanf("%s",&job);
    cout<<"\nIngrese su ID: ";
    scanf("%d",&identification);


    nuevo_empleado.Toma_ID(identification);
    nuevo_empleado.Toma_Nombre(name);
    nuevo_empleado.Toma_Provincia(state);
    nuevo_empleado.Toma_Trabajo(job);

    return nuevo_empleado;
}

int main()
{
    string name;
    string state;
    string job;
    int identification=0;

    Empleado new_empleado;

    vector <Empleado> v;

    int menu=0;

    while (menu!=6)
    {
        cout<<"-------Menu Principal------\n"<<endl;//just a menu
        cout<<"1.Agregar Empleado"<<endl;
        cout<<"2.Eliminar Empleado"<<endl;
        cout<<"3.Modificar Empleado"<<endl;
        cout<<"4.Imprimir Empleado"<<endl;
        cout<<"5.Imprimir todos los empleados"<<endl;
        cout<<"6.Salir"<<endl;
        cout<<"\n En que opcion desea Ingresar: ";
        cin>>menu;
        switch(menu)
        {
        case 1:
            new_empleado=Agregar_Nuevo();// I think here is the problem
            cout<<"H"<<endl;
            v.push_back(new_empleado);
            cout<<"Agregado con exito"<<endl;
            break;
        case 2:

            cout<<"\nIngrese el ID a eliminar: ";
            scanf("%d",&identification);
            for (int i=0;i< v.size();i++)
            {
                v.at(i).ImprimirInfo();
            }
            break;
        case 3:
            cout<<"Modificar Empleado"<<endl;
            break;
        case 4:
            /*nuevo_empleado.Dame_Nombre();*/
            break;
        }
    }


    return 0;
    cin.get();
}

好的,我是 C++ 编程的新手。我对名为 AgregarEmpleados() 或类似的方法有疑问。我一直试图解决这个问题很长时间没有结果。我做了一条双线评论,上面写着“我认为这就是问题所在。” 我认为问题出在哪里。

4

1 回答 1

2

您无法阅读std::stringusing scanfscanf("%s", ...)期望 achar*并且您不能简单地将指针传递给std::string,这是一个非常不同的数据结构。一个快速的解决方法是更改​​如下所示的行:

scanf("%s",&name);

对此:

std::cin >> name;

或这个:

std::getline(std::cin, name);
于 2012-09-04T04:36:45.597 回答