簡體   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