为什么在派生类 c++ 中找不到基类成员
Why can't find base class member in derived class c++
我试图实现shared_ptr的简化版本。但在编译过程中,编译器弹出了一个使用未声明标识符的错误。但是,我确实声明了变量。
有人能帮我弄清楚为什么吗?提前谢谢。
代码如下:
template <typename T>
class S_ptr
{
// private classes definition
private:
template <typename T2>
class DefaultDeleter
{
public:
void operator()(T2* p) { delete p; }
};
class Aux
{
template<typename> friend class S_ptr;
public:
// constructor & destructor
Aux() : ref_count_(1) {}
virtual ~Aux() {}
// member method
virtual void incre() { ++ref_count_; }
virtual void decre() = 0;
virtual void destroy() = 0;
protected:
unsigned int ref_count_; // UNDECLARED IDENTIFIER
};
template <typename T2, typename Deleter>
class AuxCounter : public Aux
{
public:
// constructor & destructor
AuxCounter(T2* p, Deleter d) : ptr_(p), deleter_(d) {}
~AuxCounter() { decre(); }
// member method
void decre() override { if(--ref_count_ == 0) destroy(); } // ERROR
void destroy() override { deleter_(ptr_); }
//public member
T2* ptr_;
private:
Deleter deleter_;
};
// private class defination end
public:
// constructor & destructor
S_ptr(T* p) : ptr_(new T(*p))
{
counter_ = new AuxCounter<T, DefaultDeleter<T>>(ptr_, DefaultDeleter<T>());
delete p;
p = nullptr;
}
template <typename T2, typename D> S_ptr(T2* p, D&& deleter) : ptr_(new T(*p))
{
counter_ = new AuxCounter<T, D>(new T(*p), deleter);
delete p;
p = nullptr;
}
S_ptr(S_ptr<T>& rhs) : ptr_(rhs.ptr_), counter_(rhs.counter_) { counter_->incre(); }
~S_ptr() { delete counter_; }
// assignment
S_ptr& operator=(const S_ptr<T>& rhs)
{
auto temp = rhs.counter_;
temp->incre();
counter_->decre();
counter_ = temp;
ptr_ = rhs.ptr_;
return *this;
}
// ..........
// private data member
T* ptr_;
Aux *counter_;
};
由于ref_count_
是一个依赖名称,因此应该使用
this->ref_count_
或
Aux::ref_count_
相关文章:
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 从子类访问模板类成员时出现"找不到标识符"错误
- 派生类看不到基类成员
- 为什么 std::variant 找不到运算符<() 当与比较类不在同一命名空间中时
- 在 OpenCL 库中找不到 cl::Error 类
- C++ 模板:重载时找不到基类类型参数方法
- 为什么编译器找不到超类的方法?
- 为什么派生类找不到基类的类型别名?
- 找不到基的构造函数
- GCC (MingW-w64) 找不到基构造函数 (!?)
- C++找不到从当前模板类继承的模板基类中定义的类型
- 派生类模板看不到基类的成员
- 为什么链接器找不到在类中声明的模板函数?
- 为什么在派生类 c++ 中找不到基类成员
- 编译时找不到c++类方法
- 通过取消引用 boost::shared_ptr 找不到派生类的方法
- g++在基类中找不到重载函数
- 从模板基类派生时找不到类型
- 编译器看不到基类
- c++模板继承看不到基类成员