2

コードは次のとおりです。

class Vec
{
public:
    Vec() {len=0;};
    Vec(int n);
    ~Vec();
    void setValue(int idx,int v);
    void printVec() const;
private:
    class Items
    {
        friend class Vec;
        Items(){value = 0;};
        Items(int v){value = v;};
        int value;
    };
    int len;
    Items *vec;
};

/*Declare the member functions & constructor & destructor*/

int main()
{
    Vec vector(5);
    vector.printVec();
    for(int i=0;i<5;i++){
        vector.setValue(i,i);
        vector.printVec();
    }
    Items n;
    return 0;
}

を使用しようとするとItems n;、「Items undeclared」というエラーが表示されます。

しかし、を使用するvector.Items n;と、エラーは「無効な使用class Vec::Items」です

コンパイラに宣言を認識させるにはどうすればよいですか?

4

1 に答える 1

2

宣言できるようにしたいと思います。

Itemsクラスのパブリックネストまたは内部クラスを作成し、そのオブジェクトタイプのインスタンスを作成するときにVecスコープ解決演算子(つまり)を使用する必要があります。それ以外の場合は、のメソッド内にオブジェクトVec::Itemsのインスタンスを作成することしかできません。これは、のプライベート内部クラスであり、パブリックにアクセス可能なクラスタイプではないためです。Vec::ItemsVecVec

于 2012-07-28T04:35:15.233 に答える