У меня проблемы с использованием переменной first_
в моем шаблонном классе (показано ниже).
template<typename T> class enable_movable_ptr {
public:
//default constructor
enable_movable_ptr() : ptr_(nullptr) {};
enable_movable_ptr(T* p) : ptr_(p) {};
//...
//other constructors and operators
//...
T* get() {return ptr_; };
movable_ptr<T>* First() { return first_; };
private:
T* ptr_;
movable_ptr<T>* first_ = nullptr;
};
template<typename T> class movable_ptr {
public:
//Parameterless constructor
movable_ptr() : trg_(nullptr) {};
//Constructor from T*
movable_ptr(T* p) : trg_(p) { add_to_tracked(this); };
//...
//other constructors and operators
//...
//access to variables
enable_movable_ptr<T>* get() {return trg_; };
movable_ptr<T>* Next(enable_movable_ptr<T>& p) {return next_; };
movable_ptr<T>* Previous(enable_movable_ptr<T>& p) {return prev_; };
//get_movable
movable_ptr<T>* get_movable(enable_movable_ptr<T>& p) {};
private:
enable_movable_ptr<T>* trg_;
movable_ptr<T>* next_ = nullptr;
movable_ptr<T>* prev_ = nullptr;
};
template<typename T> movable_ptr<T> get_movable(enable_movable_ptr<T>& p){
if (p.First() != nullptr)
{}
};
Проблема в том, что возвращаемое first_
имеет тип <error-type>
(вот что он показывает, если я наведу курсор мыши на любой first_
или First()
в коде, за исключением объявления в VS2019), вместо ожидаемого movable_ptr<T>*
. Однако, если я наведу курсор мыши на объявление first_
, оно покажет правильный тип movable_ptr<T>*
.
С моей точки зрения кажется, что компилятор имеет память goldfi sh, и забывает, что это за тип, даже находясь в пределах того же определения класса. Скорее всего, это не тот случай, и я подозреваю, что что-то, что я мог сделать неправильно, вызывает это.
Есть идеи, где я ошибся или как решить проблему?