#include <iostream>
using namespace std;
template <class T>
class ring {
private:
T *m_values;
int m_size;
int m_index;
public:
class iterator;
public:
ring(int size):
m_size(size), m_index(0), m_values(NULL) {
m_values = new T[size];
}
~ring() {
delete [] m_values;
}
int size() const {
return m_size;
}
iterator begin() {
return iterator(0, *this);
}
iterator end() {
return iterator(m_size, *this);
}
void add(T value) {
m_values[m_index] = value;
m_index = (m_index + 1) % m_size;
}
T &get(int pos) {
return m_values[pos];
}
};
template<class T>
class ring<T>::iterator {
private:
int m_pos;
ring &m_ring;
public:
iterator(int m_pos, ring &m_ring): m_pos(m_pos), m_ring(m_ring) {};
iterator &operator++(int) {
m_pos++;
return *this;
}
iterator &operator++() {
m_pos++;
return *this;
}
bool operator!=(const iterator &other) {
return other.m_pos != m_pos;
}
T &operator*() {
return m_ring.get(m_pos);
}
};
这是 C++ 代码。我是 c++ 的新手,CLion 的这段代码在 begin() 和 end() 函数中给了我“类迭代器没有构造函数迭代器(int,ring)”。谁能给我一些提示,说明为什么即使我已经定义了它也会发生这种情况?
顺便说一句:这是来自 udemy“学习高级 C++ 编程”第 44 课。
更新:一些评论发现我没有定义而只是声明。这不是原因,因为我在单独的 .cpp 文件中定义了它。我也尝试过内联定义它,但仍然给我来自 CLion 的相同错误消息。
最佳答案
您在这里声明构造函数
iterator(int m_pos, ring &m_ring);
但是没有定义这个特殊的成员函数。如果你提供一个,你可能没问题
iterator(int m_pos, ring &m_ring) : m_pos(m_pos), m_ring(m_ring)
{
/* Maybe some other stuff... */
}
关于c++ - 为什么在 C++ 中说 "can' t find constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51437010/