gpt4 book ai didi

C++ const_iterator 没有匹配的构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:29 26 4
gpt4 key购买 nike

我正在尝试为我的基于数组的列表类构建一个自定义的 const_iterator 嵌套类。这是类(class)

class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const_iterator &ci) { p=ci.p;}
const T &operator*() const {return *p;}
bool operator==(const iterator &i) const {
if(*p==*i)
return true;
else
return false;
}
bool operator!=(const_iterator &i) const {
if(*p!=*i)
return true;
else
return false;
}
const_iterator &operator=(const_iterator &i) const {
p=i.p;
return this;
}
const_iterator &operator++() const {
return const_iterator(p+1);
}
const_iterator &operator--() const {
return const_iterator(p-1);
}

const_iterator operator++(int) const {
p = p+1;
return const_iterator(p-1);
};
const_iterator operator--(int) const {
p=p-1;
return const_iterator(p+1);
}

};

但是,当我回到我的类(class)开始、结束等时,如下所示:

iterator begin() {
return iterator(&data[0]);
}
const_iterator begin() const {
return const_iterator(&data[0]);
}
iterator end() {return iterator(&data[place+1]);}
const_iterator end() const {return const_iterator(&data[place+1]);}

const_iterator cbegin() const {
return const_iterator(&data[0]);
}
const_iterator cend() const {return const_iterator(&data[place+1]);}

我得到一个错误:“没有匹配的构造函数来初始化 'ArrayList::const_iterator"在我的 cbegin 和 cend 上。我知道这可能是我不了解 C++ 的愚蠢行为。在此先感谢您的帮助!

最佳答案

要么删除 const_iterator 复制构造函数(因为不需要),要么使复制构造函数采用 const const_iterator&

这是一个最小的例子:

template <typename T>
class ArrayList
{
public:
class const_iterator {
private:
const T *p;
public:
const_iterator(const T *l) {
p = l;
}
const_iterator(const const_iterator &ci) : p(ci.p) {}
};

T data[10];

const_iterator cbegin() const {
return const_iterator(&data[0]);
}
};

int main()
{
ArrayList<int> a;
ArrayList<int>::const_iterator it = a.cbegin();
}

此处编译:http://ideone.com/04EE4P

复制构造函数的移除也编译没有错误。这表明您使用 非常量 引用的用户定义的复制构造函数导致了问题。

关于C++ const_iterator 没有匹配的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756320/

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