0

私は現在、プログラムのクラスを書いていますが、これが私が達成しようとしていることです...

  1. Setup: m_ptrEmployeeNULL とm_beginHour時間に設定します。

  2. AssignEmployee:m_ptrEmployee従業員に設定します。

  3. GetEmployeeName:m_ptrEmployeeとを使用しEmployee.GetNameて従業員名を返します。m_ptrEmployeeNULLの場合、「UNALLOCATED」を返します。

  4. 出力: and を使用m_ptrEmployeeして、従業員の名前を「8:00 - David Johnson」のようEmployee.GetNameに表示するm_beginHourか、「8:00 - UNALLOCATED」のようm_ptrEmployeeに表示します (NULL の場合)。

  5. リセット: m_ptrEmployeeNULL にリセットします。

  6. GetIsSet: m_ptrEmployeeNULL でない場合は true を返し、それ以外の場合は false を返します。

これが私のコードです...

#include <string>
using namespace std;

#include "Employee.h"

class Schedule
{
    public:
    void Setup( int hour )
        {
            m_ptrEmployee = NULL;
            m_beginHour = hour;
        };
    void AssignEmployee( Employee* employee )
        {
            m_ptrEmployee = employee;
        };
    string GetEmployeeName()
        {
            if (m_ptrEmployee = NULL)
                return "UNALLOCATED"
            else
                return Employee.GetName()
        };
    void Output()
        {
            if (m_ptrEmployee = NULL)
                cout>> m_beginHour>>"--">>"UNALLOCATED">>endl;
            else
                cout>>m_beginHour>>"--">>GetName()>>endl;
        }
    void Reset()
        {
            m_ptrEmployee = NULL;
        }
    bool GetIsSet()
        {
            if (m_ptrEmployee != NULL)
                return true;
            else
                return false;
        }
    private:
    Employee* m_ptrEmployee;
    int m_beginHour;
};

GetName()は以前のクラスに含まれており、それは...

public:
void Setup( const string& first, const string& last, float pay );
{
    m_firstName = first;
    m_lastName = last;
    m_payPerHour = pay;
    m_activeEmployee = true;
}

string GetName()
{
    return m_firstName+""+m_lastName
};

複数のエラーが表示されますが、何が間違っているのかわかりません。ポインターを使用してクラスを作成しようとするのはこれが初めてなので、私のコードがまったくひどい場合は申し訳ありません。

4

1 に答える 1

1

ここにいくつかの修正があります:

一般に、C++ での比較には注意してください。=二つのものを比較するとき、直感を使うことはできません。を使用する必要があります==。を使用する=と、テストではなく課題になります。;また、ステートメントの最後にあるセミコロンを忘れないでください。

悪い比較:

if (m_ptrEmployee = NULL) //Assigns NULL to m_ptrEmployee and then tests m_ptrEmployee
                          //Always false because m_ptrEmployee was just assigned NULL

良い比較:

if (m_ptrEmployee == NULL) //Better. This is false only when m_ptrEmployee equals NULL

ポインター (m_ptrEmployee など) を介してクラスのメンバーにアクセスする場合は、次の->ように演算子を使用する必要があります。m_ptrEmployee->GetName()

演算子 cout は、<<演算子ではなく、>>演算子と共に使用されます。

コード内で間違いを犯した場所に注釈を付けました。

#include <string>
using namespace std;

#include "Employee.h"

class Schedule
{
    public:
    void Setup( int hour )
        {
            m_ptrEmployee = NULL;
            m_beginHour = hour;
        };
    void AssignEmployee( Employee* employee )
        {
            m_ptrEmployee = employee;
        };
    string GetEmployeeName()
        {
            if (m_ptrEmployee == NULL)   //Comparison always takes double ==
                return "UNALLOCATED";
            else
                return m_ptrEmployee->GetName();   //Use employee pointer with -> operator
        };
    void Output()
        {
            if (m_ptrEmployee == NULL)   //Careful with comparisons. Always use ==, not =
                cout << m_beginHour << "--" << "UNALLOCATED" << endl;  //Operator << was the other way around. It's not >>, but << for cout
            else
                cout << m_beginHour << "--" << m_ptrEmployee->GetName() << endl;
        }
    void Reset()
        {
            m_ptrEmployee = NULL;
        }
    bool GetIsSet()
        {
            if (m_ptrEmployee != NULL)
                return true;
            else
                return false;
        }

    private:
    Employee* m_ptrEmployee;
    int m_beginHour;
};
于 2013-09-26T01:18:20.573 に答える