当前位置: 首页 > 知识库问答 >
问题:

我如何修复这个错误`从const_iterator到非标量类型的转换`?

富辰阳
2023-03-14

给定以下类:

#include <vector>
#include <iostream>

using std::vector;
using std::ostream;

template<class T>
class Gen {
    vector<T> array;
public:
    explicit Gen(int size);
    template<class S>
    friend ostream& operator<<(ostream& os, const Gen<S>& g);
};

template<class T>
Gen<T>::Gen(int size) {
    for (int i = 0; i < size; i++) {
        this->array.push_back(T());
    }
}

template<class T>
ostream& operator<<(ostream& os, const Gen<T>& g) {
    for (typename vector<T>::iterator it = g.array.begin(); it != g.array.end();
            it++) { // ****** error ********
        os << *it << " ";
    }
    return os;
}

int main() {
    Gen<int> g(3);
    std::cout << g << std::endl;
}

我该怎么解决呢?

共有1个答案

张华池
2023-03-14

您正在将常量gen 传递给运算符<<。这意味着当您调用g.array.begin()时,您调用的是begin的const重载,它返回一个const_iterator:

const_iterator begin() const noexcept;

然后尝试将其分配给向量 ::iterator ,这会导致编译器错误。您可以这样修复:

auto it = g.array.begin()

它告诉编译器推断it的正确类型。

 类似资料: