1

我有一个名为 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<T>::begin() const{

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

4

2 回答 2

1

利用

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

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

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

于 2020-10-18T13:04:21.230 回答
0

const_iterator仅存在于Nuage某些 T 的实例化范围内。您有两个选项来修复您的代码。要么添加显式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();
}
于 2020-10-18T13:11:05.270 回答