gpt4 book ai didi

c++ - 内部类和访问外部成员

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:26 25 4
gpt4 key购买 nike

我一直认为内部类可以访问其外部类中的所有数据但是有代码:

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_;
}
};

请参阅标记为注释的行。
那么在内部类中我可以或不能使用外部类的成员吗?
不要为命名烦恼,它不是 Vector,而是 Set。
谢谢。

最佳答案

您需要将外部类的实例传递给内部类。换句话说,您的Iterator 类必须有一个指向Vector 实例的引用(或指针)。执行此操作的最佳方法是让 Iterator 构造函数引用 Vector

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

关于c++ - 内部类和访问外部成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com