c++ - 为什么在 C++ 中说 "can' t find constructor?

标签 c++

#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/

相关文章:

c++ - Eigen 与 -O3 警告 : argument 1 value ‘X’ exceeds maximum object size Y

c++ - 如何在使用 cmake 构建的 LLVM 中启用 --debug-only?

C++-缓冲区和流都需要什么?

c++ - 在 DOS 中添加按钮

c++ - 如何在运行时将参数放入函数中?

c++ - 如何从内存中清除 C++ 中的 vector

c++ - 获取小数点值

c++ - 错误登录C++

c++ - Linux绘制像素缓冲区

c++ - 在嵌入式系统的 C++ 中对有效和无效数字的数组进行排序