【问题标题】:Error C++ : ‘const_iterator’ does not name a type;错误 C++:‘const_iterator’没有命名类型;
【发布时间】:2021-02-01 09:41:33
【问题描述】:

我有一个名为 Nuage 的类(它是一个点的集合),我将使用类 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&lt;T&gt;::begin() const{

谁能帮我找到它?谢谢

【问题讨论】:

    标签: c++ templates generics vector


    【解决方案1】:

    const_iterator 仅存在于某些 T 的 Nuage 的实例化范围内。您有两个选项来修复您的代码。要么添加明确的Nuage&lt;T&gt;::

    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();
    }
    

    【讨论】:

      【解决方案2】:

      使用

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

      当编译器使用您的 .cpp 文件时,您引用了一个不存在的类型 const_iterator。只有Nuage&lt;T&gt;::const_iterator 存在。易于监督。

      需要typename 关键字,因为Nuage&lt;T&gt;::const_iterator 是一个从属名称。需要告诉编译器这个表达式是一个类型,而不是静态变量或函数或类中的其他东西。

      【讨论】:

      • 它仍然给出一个错误,上面写着:需要在'Nuage::const_iterator'之前使用'typename',因为'Nuage'是一个依赖范围
      • 然后添加typename。我也会添加到答案中。 :-)
      猜你喜欢
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      相关资源
      最近更新 更多