0

従業員クラスに問題があります。プログラム自体にはサンプルの従業員があり、ユーザーはさらに多くの従業員をプログラムに入力できます。私が抱えている問題は、1 人の新しい従業員を追加して、サンプル従業員と新しく追加された従業員の両方のリストを印刷できることですが、2 番目の従業員を追加して印刷しようとすると、2 番目の従業員が最初の従業員を上書きします。従業員を追加しました。

問題が使用している配列 (数字、名、姓、部門の 4 つの要素) にあるのか、それとも呼び出されている関数に問題があるのか​​、コードの下で実行されているかどうかはわかりません。

ヘッダファイル:

#include <iostream>
using namespace std;

class employee
{

public :
    employee();
    employee(int, char*, char*, char*); // employee works number, name, department
    void Set( int, char*, char*, char*); // set the number, name and dept
    void Print();
    void printmenu();
    ~employee(); //destructor

private: 
    int e_num; // employee number
    char e_fname[30];
    char e_lname [30];
    char e_dept[30];

}; 

CPP ファイル:

#include <iostream>
#include "employee.h"
using namespace std;


employee::employee() 
{

}

employee::employee(int num, char* fname, char* lname, char* dept)
{
    Set(num, fname, lname, dept);
}

void employee::Set( int num, char* fname, char* lname, char* dept)
{
    if (num < 0 )
    {
    return ; // add in code here to give error message if works is less than 0
    }
    e_num = num;
    strcpy (e_fname, fname);
    strcpy (e_lname, lname);
    strcpy (e_dept, dept);

}

void employee::Print()
{
        cout << e_num <<" \t " << e_fname <<" "<< e_lname <<" \t " << e_dept << " \n";
}

void employee::printmenu()
{
    cout << "EMPLOYEE MENU\n"
         << "~~~~~~~~~~~~~\n"
         << "1. Add New Employee\n"
         << "2. Edit Employee\n"
         << "3. Delete Employee\n"
         << "4. Print Employee List\n"
         << "5. Exit\n";
}

employee::~employee()
{

}

主要:

#include <iostream>
#include "employee.h"
using namespace std;

void main (void)
{
    char input;
    bool done = false;  

    employee emp1(1, "Joe", "Bloggs", "Customer Service");// sample employee
    int empcount = 1;
    employee empnew[20];

    int num, j=0, k=0; // num is employee number
    char* fname = new char [20]; // employee first name
    char* lname = new char [20];  // employee last name
    char* dept  = new char [30]; // employee department


    while(!done)
    {       
    employee pmenu;
    pmenu.printmenu();

    cout <<"Please make your selection:";
    cin >> input;

    switch (input)
    {
    case '1': // add new employee

        cout<<"\nEnter Employee Number:";   
        cin >> num;
        cout<<"\nEnter first name:";
        cin >> fname;
        cout<<"\nEnter Last name:";
        cin >> lname;
        cout << "\nEnter Department:";
        cin >> dept;
        cout << "\n";

        empnew[j].Set(num, fname, lname, dept);
        empcount++;

        cout << "New employee added:"<< fname <<" "<<lname << "\n";
        cout<< "New Number of Employees:" << empcount<< "\n\n";
        break; 

    case '2': //Edit Employee
    // enter stuff here
        break;

    case '3': //Delete Employee
    // enter stuff here
        break;
    case '4': // print employee list

        cout <<"Total number of Employees:"<<empcount<<endl;
        cout <<"Number \t Employee Name \t Department \n" ;

        if (empcount == 1)
        {
            emp1.Print(); 
        }
        else 
        {
            emp1.Print(); 
            empnew[j].Print();//print input
        }
        cout <<"\n";
        break;
    case '5':
        cout << "Program closing\n";
        done = true;
        break;

    }

    }
    getchar();
    return ;
}

(すべてのコードを投稿して申し訳ありませんが、重要なものを残したくありませんでした)

2番目(および後続の従業員)を印刷するためにいくつかの異なる方法を試しましたが、配列または関数を変更しようとするとエラーが発生し、コードがコンパイルされません。

新入社員が使うと思った

empnew[j]= new employee (num ,fname,lname,dept); 

しかし、それは私に「エラー:演算子「=はこれらのオペランドと一致しません」」を与えます

どちらも機能しない他の多くのバリエーションと一緒に。

ご想像のとおり、ive は c++ を使い始めたばかりなので、どんな助けも大いに役に立ちます。

4

2 に答える 2

2

従業員データをempnew[j]配列項目に設定しますが、j変数は変更されません。このスニペットから判断すると:

empnew[j].Set(num, fname, lname, dept);
empcount++;

おそらくあなたはに変更する必要があります

empnew[empcount++].Set(num, fname, lname, dept);
于 2012-11-08T11:32:23.023 に答える
1

演算子はポインターnewを返し、値の配列を取得します。

ポインターの配列を作成するか、(私が推奨する) コピー コンストラクターを実装してコピーを使用する必要があります。

empnew[j] = employee (num ,fname, lname, dept);
于 2012-11-08T11:30:49.750 に答える