如何解决非模板容器迭代器
假设我们有一个没有模板的类Container
,并且函数begin()
和end()
的返回了一个类Container_iterator
。 Container
类中包含一个映射:
class Container
{
Container_iterator begin();
Container_iterator end();
};
class Container_iterator
{
Container operator*();
}
现在,此代码无法编译,因此我们添加了类的前向定义。但是,在代码中仍然无法编译,说Container
是不完整的类型。有什么方法可以编译代码,还是无法在没有模板的情况下实现迭代器?
编辑:代码
namespace json
{
class JSONobj
{
void* to_value;
json_types t;
public:
typedef std::unordered_map<std::string,JSONobj> json_obj;
// iterator class
class iterator : std::iterator < std::forward_iterator_tag,JSONobj,size_t>
{
public:
private:
json_array::iterator it_array;
json_obj::iterator it_obj;
json_iterator_types t;
public:
iterator(JSONobj::json_array::iterator& _it_array);
// prefix ++ operator
iterator& operator++();
// suffix ++ operator
iterator& operator++(int);
std::string key();
// dereferance operator
reference operator*();
};
inline reference front() {}
inline reference back() {}
}
}
解决方法
您只需将Container_iterator
设置为Container
的嵌套类型成员,它将起作用:
class Container
{
class Container_iterator
{
Container operator*();
};
Container_iterator begin();
Container_iterator end();
};
此外,迭代器返回Container
而不是Container
的元素似乎很奇怪,但是上面的解决方案在这种情况下也适用。
有什么方法可以使代码编译
在使用声明之前,只需声明类。并添加缺少的分号。
按照cigien的answer中的建议将迭代器定义为嵌套类是常规的,我建议采用这种方法。但这不是绝对必要的。
但是,代码中仍然无法编译
说Container是不完整的类型。
这不是使用向前声明可以解决的问题。这意味着您在该定义之前使用了类的定义。
由于未使用Container
的定义,因此在您的示例中未产生此错误。
可以通过对代码进行不同的排序来解决此错误,以便在使用其定义之前定义该类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。