2010-04-17 107 views
2

我始终认为,内部类可以访问所有的数据在其外部类,但有代码:内部类和获得外部成员

template<class T> 
class Vector 
{ 
template<class T> 
friend 
std::ostream& operator<<(std::ostream& out, const Vector<T>& obj); 
private: 
T** myData_; 
std::size_t myIndex_; 
std::size_t mySize_; 
public: 
Vector():myData_(nullptr), 
    myIndex_(0), 
    mySize_(0) 
{ } 
Vector(const Vector<T>& pattern); 
void insert(const T&); 
Vector<T> makeUnion(const Vector<T>&)const; 
Vector<T> makeIntersection(const Vector<T>&)const; 
class Iterator : public std::iterator<std::bidirectional_iterator_tag,T> 
{ 
private: 
    T** itData_; 
public: 
    Iterator()//<<<<<<<<<<<<<------------COMMENT 
    { /*HERE I'M TRYING TO USE ANY MEMBER FROM Vector<T> AND I'M GETTING ERR SAYING: 
    ILLEGAL CALL OF NON-STATIC MEMBER FUNCTION*/} 

    Iterator(T** ty) 
    { 
    itData_ = ty; 
    } 

    Iterator operator++() 
    { 
    return ++itData_; 
    } 

    T operator*() 
    { 
    return *itData_[0]; 
    } 

    bool operator==(const Iterator& obj) 
    { 
    return *itData_ == *obj.itData_; 
    } 

    bool operator!=(const Iterator& obj) 
    { 
    return *itData_ != *obj.itData_; 
    } 

    bool operator<(const Iterator& obj) 
    { 
    return *itData_ < *obj.itData_; 
    } 
}; 

typedef Iterator iterator; 

iterator begin()const 
{ 
    assert(mySize_ > 0); 
    return myData_; 
} 

iterator end()const 
{ 
    return myData_ + myIndex_; 
} 
}; 

见行标记为注释。
因此,我可以在内部课堂上不能使用外部课程的成员吗?
不要担心命名,它不是一个矢量它是一个集合。
谢谢。

+0

如果你来自Java,C++在这方面是不同的。 嵌套类与封闭类是分开的。 – Anycorn 2010-04-17 18:19:39

回答

6

您需要将外部类的实例传递给内部类。换句话说,您的Iterator类必须有一个方便的实例Vector的引用(或指针)。最好的方法是让Iterator构造函数参考Vector

Iterator(Vector& v) : vec_(v) 
{ 
    vec_.do_something(); 
} 
-1

您无法从C++中的sourrounding类访问字段或方法!

相关问题