2012-09-04 2 views
-3
#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() 또는 이와 비슷한 방법으로 의심 스럽습니다. 나는 결과없이 오랫동안이 문제를 해결하려고 노력 해왔다. 나는 "나는 여기에 문제가 있다고 생각한다"고하는 두 줄짜리 논평을했다. 나는 그 문제가 있다고 믿는다.똥과 (변수에 객체를 추가) STL 벡터

+2

이 문제의 사용과 최소한의 컴파일 가능한 예제를 만들하세요 빠른 수정은 다음과 같이 라인을 변경하는 것 사례를 게시하고 여기에 해당 사례를 게시하십시오. –

+1

1) 공유 할 코드가있는 경우 먼저 여기에 질문과 함께 코드를 게시하십시오. 사용자가 제 3 자 사이트에서 다운로드하지 않도록하십시오. 2) 코드를 공유하는 경우 관련 부분 만 공유하면 전체 파일을 저장하지 않습니다. 3) 답장을받지 못하면 질문 뒤에 약간의 노력을 기울이십시오. – Krishnabhadra

+0

@ Cœur 오래된 질문, 닫히기, 죽은 질문에 부딪 치지 마십시오. 사소한 편집으로. –

답변

2

std::stringscanf을 사용할 수 없습니다. scanf("%s", ...)char*이고 단순히 std::string에 포인터를 전달할 수는 없으며 매우 다른 데이터 구조입니다.

scanf("%s",&name); 

이에 :

std::cin >> name; 

나이 :

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

Blastfurnace 덕분에 많이 작동합니다! – 3MMM

+4

@ MarianoMonteroMuñoz : 천만에요. 'C++ '을 배우고 있다면'C++'스타일 I/O를 고수하고'printf','scanf'와 같은'C' 함수와 섞지 않는 것이 가장 좋습니다. – Blastfurnace

+0

다시 한번 감사 드리며 당신의 추천을 적용 할 것입니다! – 3MMM