3

列挙型を戻り値の型として受け入れる関数を取得する際に問題がありました。以下のコードには、列挙型があります。

Status{ DEAD, WOUNDED, HEALTHY }

戻り値の型として Status を持つ関数:

Status getStatus();

ヘッダー コード:

class Discovery
{
public:
    void doCombat( int );
    void setCombatThreshold( int );
    void setHealth( int );
    void setStatus( int );
    Status getStatus();
private:
    enum Status { DEAD, WOUNDED, HEALTHY };
    Status charStatus;
    int yourHealth;
    int combatThreshold;
};

最初に関連する関数の定義は次のように読み取られます。

Status Discovery::getStatus()
{
    switch ( charStatus )
    {
    case DEAD:
        return DEAD;
        break;
    case WOUNDED:
        return WOUNDED;
        break;
    case HEALTHY:
        return HEALTHY;
        break;
    };
}

私はこの答えを見つけました: return enum from function from function in C++ base classは、関数の最初の行を読む必要があることに気付くのに役立ちました:

Discovery::Status Discovery::getStatus()

しかし、ヘッダー コードの「型指定子がありません」というエラーが引き続き表示されます。'enum Status' 宣言をプライベート アクセス指定子の下に置くと違いが生じる可能性があることに気付いたので、それをヘッダー コードのパブリック アクセス指定子に移動しました。出来た!しかし、プライベートアクセス指定子の下で機能しない理由について、いくつかの説明が必要です。私が他の場所で見つけたものは次のとおりです。

クラスのオブジェクトは、プライベート データ メンバーにアクセスできません。

何が起こったのかについての私の解釈-プライベートアクセス指定子の下の列挙型定義では、関数(および最終的にその関数を呼び出すオブジェクト)はおそらく私の列挙型にアクセスできず、したがってそれをリターンタイプ。

しかし、もしそうなら、なぜ私は同じ問題でプライベート アクセス指定子の下で宣言された変数を返すことができるのでしょうか? それらの型は他の場所で既に理解されているためであり、プログラムはそれらを問​​題なく受け入れることができますか?

4

2 に答える 2

4

ステータスは、使用後に定義されます。getメソッドの前にステータスを上に移動します。

クラス外で列挙型を使用する場合は、列挙型をパブリックスコープに移動する必要があります。

于 2011-08-05T20:11:27.163 に答える