繁体   English   中英

错误 C++:“const_iterator”未命名类型;

[英]Error C++ : ‘const_iterator’ does not name a type;

我有一个名为 Nuage(它是 Points 的集合)的类,我将在其中使用 Vector 类的函数来操作该类。 nuage.cpp 文件是:

#include <iostream>
#include "nuage.hpp"


template <typename T>
Nuage<T>::Nuage(){}

template <typename T>
void Nuage<T>::ajouter(const T& p) {
    v.push_back(p);
}

template <typename T>
unsigned int Nuage<T>::size() const {
    return v.size();
}


template <typename T>
const_iterator Nuage<T>::begin() const{
    return v.begin();


template <typename T>
Nuage<T>::~Nuage(){}

nuage.hpp 是:

#ifndef NUAGE_HPP
#define NUAGE_HPP
#include <cstdlib>
#include <sstream>
#include <vector>

template <typename T>    
class Nuage {

    private:
        std::vector<T> v;
    
    public:
        using const_iterator = typename std::vector<T>::const_iterator;
        Nuage();
        void ajouter(const T&);
        unsigned int size() const;
        const_iterator begin() const;
        ~Nuage();
};

#endif

我有一个错误说:

error: ‘const_iterator’ does not name a type; did you mean ‘constexpr’?

错误在这一行: const_iterator Nuage<T>::begin() const{

有人可以帮我找到它吗? 谢谢

template <typename T>
typename Nuage<T>::const_iterator Nuage<T>::begin() const{
    return v.begin();
}

当编译器处理您的.cpp文件时,您引用了一个不存在的类型const_iterator 只有Nuage<T>::const_iterator存在。 易于监督。

因为Nuage<T>::const_iterator是依赖名称,所以需要typename关键字。 编译器需要被告知这个表达式是一种类型,而不是静态变量或函数或类中的其他东西。

const_iterator仅存在于某些 T 的Nuage实例化范围内。您有两种选择来修复您的代码。 添加显式Nuage<T>::

template <typename T>
typename Nuage<T>::const_iterator Nuage<T>::begin() const{
    return v.begin();
}

或使用后缀返回类型表示法:

template <typename T>
auto Nuage<T>::begin() -> const_iterator const{
    return v.begin();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM