POO和STL向量(将对象添加到变量)

时间:2012-09-04 04:21:01

标签: c++

#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()的方法有疑问。我已经试图解决这个问题很长一段时间没有结果。我做了一个双线评论说'#34;我认为这是问题所在。&#34;在哪里我认为问题是。

1 个答案:

答案 0 :(得分:2)

您无法使用std::string阅读scanfscanf("%s", ...)期望char*,您不能简单地将指针传递给std::string,这是一个非常不同的数据结构。快速解决方法是更改​​看起来像这样的行:

scanf("%s",&name);

到此:

std::cin >> name;

或者这个:

std::getline(std::cin, name);