Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么它会说“什么?”;can';“找不到构造函数”;在c++;? #包括 使用名称空间std; 模板 阶级戒指{ 私人: T*m_值; 国际货币单位大小; int m_指数; 公众: 类迭代器; 公众: 环(整数大小): m_大小(大小)、m_索引(0)、m_值(空){ m_值=新的T[尺寸]; } ~ring(){ 删除[]个m_值; } int size()常量{ 返回m_大小; } 迭代器begin(){ 返回迭代器(0,*this); } 迭代器结束(){ 返回迭代器(m_size,*this); } 无效添加(T值){ m_值[m_索引]=值; m_指数=(m_指数+1)%m_大小; } T&get(内部位置){ 返回m_值[pos]; } }; 模板 类环::迭代器{ 私人: 国际货币基金组织; 环&m_环; 公众: 迭代器(intm_-pos,ring&m_-ring):m_-pos(m_-pos),m_-ring(m_-ring){}; 迭代器和运算符++(int){ m_pos++; 归还*这个; } 迭代器和运算符++(){ m_pos++; 归还*这个; } 布尔运算符!=(常量迭代器和其他){ 返回other.m_pos!=m_pos; } T&运算符*(){ 返回m_环。获取(m_位置); } }; 这里是C++代码。我是C++的新手,克利永的代码给我“类迭代器没有在开始”和Enter()函数中有一个构造函数迭代器(int,环)。没有人能给我一些提示,即使我已经定义了它,为什么会发生这种情况 BTW:这是从UDMEY“学习高级C++编程”第44讲。_C++ - Fatal编程技术网

为什么它会说“什么?”;can';“找不到构造函数”;在c++;? #包括 使用名称空间std; 模板 阶级戒指{ 私人: T*m_值; 国际货币单位大小; int m_指数; 公众: 类迭代器; 公众: 环(整数大小): m_大小(大小)、m_索引(0)、m_值(空){ m_值=新的T[尺寸]; } ~ring(){ 删除[]个m_值; } int size()常量{ 返回m_大小; } 迭代器begin(){ 返回迭代器(0,*this); } 迭代器结束(){ 返回迭代器(m_size,*this); } 无效添加(T值){ m_值[m_索引]=值; m_指数=(m_指数+1)%m_大小; } T&get(内部位置){ 返回m_值[pos]; } }; 模板 类环::迭代器{ 私人: 国际货币基金组织; 环&m_环; 公众: 迭代器(intm_-pos,ring&m_-ring):m_-pos(m_-pos),m_-ring(m_-ring){}; 迭代器和运算符++(int){ m_pos++; 归还*这个; } 迭代器和运算符++(){ m_pos++; 归还*这个; } 布尔运算符!=(常量迭代器和其他){ 返回other.m_pos!=m_pos; } T&运算符*(){ 返回m_环。获取(m_位置); } }; 这里是C++代码。我是C++的新手,克利永的代码给我“类迭代器没有在开始”和Enter()函数中有一个构造函数迭代器(int,环)。没有人能给我一些提示,即使我已经定义了它,为什么会发生这种情况 BTW:这是从UDMEY“学习高级C++编程”第44讲。

为什么它会说“什么?”;can';“找不到构造函数”;在c++;? #包括 使用名称空间std; 模板 阶级戒指{ 私人: T*m_值; 国际货币单位大小; int m_指数; 公众: 类迭代器; 公众: 环(整数大小): m_大小(大小)、m_索引(0)、m_值(空){ m_值=新的T[尺寸]; } ~ring(){ 删除[]个m_值; } int size()常量{ 返回m_大小; } 迭代器begin(){ 返回迭代器(0,*this); } 迭代器结束(){ 返回迭代器(m_size,*this); } 无效添加(T值){ m_值[m_索引]=值; m_指数=(m_指数+1)%m_大小; } T&get(内部位置){ 返回m_值[pos]; } }; 模板 类环::迭代器{ 私人: 国际货币基金组织; 环&m_环; 公众: 迭代器(intm_-pos,ring&m_-ring):m_-pos(m_-pos),m_-ring(m_-ring){}; 迭代器和运算符++(int){ m_pos++; 归还*这个; } 迭代器和运算符++(){ m_pos++; 归还*这个; } 布尔运算符!=(常量迭代器和其他){ 返回other.m_pos!=m_pos; } T&运算符*(){ 返回m_环。获取(m_位置); } }; 这里是C++代码。我是C++的新手,克利永的代码给我“类迭代器没有在开始”和Enter()函数中有一个构造函数迭代器(int,环)。没有人能给我一些提示,即使我已经定义了它,为什么会发生这种情况 BTW:这是从UDMEY“学习高级C++编程”第44讲。,c++,C++,更新:一些评论发现我没有定义,只是声明了。这不是原因,因为我在一个单独的.cpp文件中定义了它。我还尝试以内联方式定义它,但仍然从CLion那里给我相同的错误消息。您在这里声明构造函数 #include <iostream> using namespace std; template <class T> class ring { private: T *m_values; int m_size; int m_index; public:

更新:一些评论发现我没有定义,只是声明了。这不是原因,因为我在一个单独的.cpp文件中定义了它。我还尝试以内联方式定义它,但仍然从CLion那里给我相同的错误消息。

在这里声明构造函数

#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);
    }
};
但是这个特殊的成员函数没有定义。如果你提供一个,你可能很好

iterator(int m_pos, ring &m_ring);

您可以在这里声明构造函数

#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);
    }
};
但是这个特殊的成员函数没有定义。如果你提供一个,你可能很好

iterator(int m_pos, ring &m_ring);

声明了interator(int,ring),但未定义它。这就是问题所在

声明与定义:

声明提供了符号的基本属性:类型和属性 名称定义提供了该符号的所有细节——如果是 一个函数,它做什么;如果它是一个类,它包含哪些字段和方法 有如果它是一个变量,那么该变量存储在哪里。通常情况下 编译器只需要有一个声明就可以 将文件编译为对象文件,期望链接器能够找到 来自另一个文件的定义。如果没有源文件定义 符号,但它已声明,您将在链接时收到错误 抱怨未定义的符号


src:

声明了interator(int,ring),但未定义它。这就是问题所在

声明与定义:

声明提供了符号的基本属性:类型和属性 名称定义提供了该符号的所有细节——如果是 一个函数,它做什么;如果它是一个类,它包含哪些字段和方法 有如果它是一个变量,那么该变量存储在哪里。通常情况下 编译器只需要有一个声明就可以 将文件编译为对象文件,期望链接器能够找到 来自另一个文件的定义。如果没有源文件定义 符号,但它已声明,您将在链接时收到错误 抱怨未定义的符号


src:

我觉得这不是正确的答案。这是编译器错误,不是链接错误。我认为问题在于声明的顺序。迭代器仅在使用时被前向声明,@john它编译得很好,没有链接。CLion消息看起来确实像是一个编译问题,但这可能只是误导。很抱歉,我已经完全按照您的方式定义了构造函数,但仍然得到相同的编译问题。我觉得这不是正确的答案。这是编译器错误,不是链接错误。我认为问题在于声明的顺序。迭代器仅在使用时被前向声明,@john它编译得很好,没有链接。CLion消息看起来确实像一个编译问题,但这可能只是误导。很抱歉,我已经完全按照您的方式定义了构造函数,但仍然得到相同的编译问题。最好更正问题中给出的代码。我尝试在头文件和cpp文件中定义构造函数,它总是显示“编译”问题。最好更正问题中给出的代码。我试图在头文件和cpp文件中定义构造函数,它总是显示“编译”问题。您是遇到编译器错误还是IDE错误?假设迭代器构造函数实际上是在某个地方定义的,这应该可以编译。您是遇到编译器错误还是IDE错误?假设迭代器构造函数实际上是在某个地方定义的,这应该可以编译。