gpt4 book ai didi

c++ - 错误-根据g++未声明继承的类字段

转载 作者:行者123 更新时间:2023-12-02 11:05:39 24 4
gpt4 key购买 nike

我有一个具有以下逻辑的代码。 g++给了我我在iterator2中没有声明n的错误。有什么事吗

template <typename T> class List{
template <typename TT> class Node;
Node<T> *head;
/* (...) */
template <bool D> class iterator1{
protected: Node<T> n;
public: iterator1( Node<T> *nn ) { n = nn }
/* (...) */
};
template <bool D> class iterator2 : public iterator1<D>{
public:
iterator2( Node<T> *nn ) : iterator1<D>( nn ) {}
void fun( Node<T> *nn ) { n = nn; }
/* (...) */
};
};

编辑:

我附上了实际的头文件。 iterator1将是iterable_frame,iterator2将是switchable_frame。
#ifndef LST_H
#define LST_H

template <typename T>
class List {
public:
template <typename TT> class Node;
private:
Node<T> *head;
public:
List() { head = new Node<T>; }
~List() { empty_list(); delete head; }
List( const List &l );

inline bool is_empty() const { return head->next[0] == head; }
void empty_list();

template <bool DIM> class iterable_frame {
protected:
Node<T> *head;
Node<T> **caret;
public:
iterable_frame( const List &l ) { head = *(caret = &l.head); }
iterable_frame( const iterable_frame &i ) { head = *(caret = i.caret); }
~iterable_frame() {}
/* (...) - a few methods follow */
template <bool _DIM> friend class supervised_frame;
};
template <bool DIM> class switchable_frame : public iterable_frame<DIM> {
Node<T> *main_head;
public:
switchable_frame( const List& l ) : iterable_frame<DIM>(l) { main_head = head; }
inline bool next_frame() {
caret = &head->next[!DIM];
head = *caret;
return head != main_head;
}
};
template <bool DIM> class supervised_frame {
iterable_frame<DIM> sentinels;
iterable_frame<DIM> cells;
public:
supervised_frame( const List &l ) : sentinels(l), cells(l) {}
~supervised_frame() {}
/* (...) - a few methods follow */
};

template <typename TT> class Node {
unsigned index[2];
TT num;
Node<TT> *next[2];
public:
Node( unsigned x = 0, unsigned y = 0 ) {
index[0]=x; index[1]=y;
next[0] = this; next[1] = this;
}
Node( unsigned x, unsigned y, TT d ) {
index[0]=x; index[1]=y;
num=d;
next[0] = this; next[1] = this;
}
Node( const Node &n ) {
index[0] = n.index[0]; index[1] = n.index[1];
num = n.num;
next[0] = next[1] = this;
}
~Node() {}
friend class List;
};
};
#include "List.cpp"

#endif

确切的错误日志如下:
In file included from main.cpp:1:
List.h: In member function ‘bool List<T>::switchable_frame<DIM>::next_frame()’:
List.h:77: error: ‘caret’ was not declared in this scope

最佳答案

正确的两阶段名称查找要求在阶段1中查找非依赖名称(即,不依赖模板参数的名称)。此时,无法看到模板化基础的基类成员(因为专门化)可能会产生不同的布局)。解决方法是使名称依赖。更改

n = nn;

成为
this->n = nn;

或者,在扩展示例中,更改
inline bool next_frame() {
caret = &head->next[!DIM];
head = *caret;
return head != main_head;
}

成为
inline bool next_frame() {
this->caret = &head->next[!DIM];
head = *this->caret;
return head != main_head;
}

关于c++ - 错误-根据g++未声明继承的类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13852772/

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