Jea*_*lho 0 c++ containers templates
我正在尝试创建一个应该定义图搜索算法行为的类.
该类接收一个通用容器作为模板参数,并根据容器进行操作
template <typename N, typename E, class Container>
class Frontier {
private:
Container frontier;
public:
bool isEmpty() { return this.frontier.empty(); }
typename Graph<N, E>::const_iterator pop() { return this.frontier.pop(); }
bool push(typename Graph<N, E>::const_iterator it) { return this.frontier.push(it); }
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时我得到了
request for member ‘frontier’ in ‘this’, which is of non-class type
Run Code Online (Sandbox Code Playgroud)
我知道这可以做到,因为stl容器是这样实现的
template<class T, Class C = deque<T> > class std::stack;
Run Code Online (Sandbox Code Playgroud)
我注意到了Class中的大写C,所以我尝试在实现中使用Class但是我从编译器中得到了"Class not defined".我怎么解决这个问题?
您错过了错误消息的结束,这将告诉您这this是一个指针,并询问您是否要使用->而不是..这应该可以解决错误.
请注意,class并typename在模板参数列表等效.没什么大不了的,但是一致性很好.(注意,Class作为关键字无效.不确定从哪里得到...)
template <typename N, typename E, typename Container>
class Frontier {
private:
Container frontier;
public:
bool isEmpty() { return this->frontier.empty(); }
typename Graph<N, E>::const_iterator pop() { return this->frontier.pop(); }
bool push(typename Graph<N, E>::const_iterator it) { return this->frontier.push(it); }
};
Run Code Online (Sandbox Code Playgroud)