1
//In Analyzer.h

class Analyzer
{
public :
    enum color{red, green ,blue};
Analyzer()
{
     cout<<"ctor";
}
    ~Analyzer();
};

//In main.cpp
#include"Analyzer.h"
int main()
{
    Analyzer *Ana = new Analyzer();
    Ana->color c ;//Error
    Analyzer::color c ;//Ok
    return 0
}

クラス名を使用してアクセスできるのに、クラスオブジェクトから色にアクセスできない理由がわかりません。

4

2 に答える 2

3

メンバー アクセス演算子->であり.、クラスのデータ メンバー、列挙型メンバー、およびメンバー関数にアクセスするためにのみ使用できます。ところで、これらの演算子を使用して静的データ メンバーと関数にアクセスすることは完全に合法ですが、そのようなアクセスには左側が必要ではありません (いずれにしても左側が評価されます)。

これらの演算子を使用して、ネストされたクラスの型にアクセスすることはできません。

あなたの例colorでは、ネストされた型です。つまりAna->color、有効な構造ではありません。一方、Ada->red有効です。

于 2012-12-25T08:52:52.163 に答える
2

アロー演算子によってのみ、クラスのデータ メンバーとメンバー関数にアクセスできます。列挙型はネストされた型です。

于 2012-12-25T08:49:59.780 に答える