簡體   English   中英

我包括<iterator>但得到未知的類型名稱“迭代器”

[英]Im including <iterator> but get unknown type name 'iterator'

我覺得這一定是命名空間污染的問題,否則我不知道我的編譯器認為迭代器是一個未知的類型名稱

在以前的編碼項目中,我有一個具有完全相同方法聲明的類,沒有任何問題,這就是為什么我不明白為什么它在這里不起作用。

完整的錯誤是

In file included from AlgoContainer.cc:1:
./AlgoContainer.h:14:3: fatal error: unknown type name 'iterator'
            iterator begin() const;
            ^

產生了 1 個錯誤。

下面是在我的頭文件中拋出錯誤的代碼

#ifndef AlgoContainer_H_INCLUDED
#define AlgoContainer_H_INCLUDED

#include <vector>
#include "Task.h"
#include <iterator>


class AlgoContainer{
    public:
        AlgoContainer() = default;
        void addTask(const Task);
        ~AlgoContainer();
        iterator begin() const;
        iterator end() const;

    private:
        std::vector<Task> allTasks;
        void sort();
    
 };

 #endif /*AlgoContainer_H_INCLUDED*/

如果需要,我將包含我正在使用的任務頭文件和 AlgoContainer.cc 文件

算法容器.cc

#include "AlgoContainer.h"

using namespaces std;

AlgoContainer::addTask(const Task newTask){
    this->allTasks.push_back(newTask);
}

AlgoContainer::~AlgoContainer(){
    //TODO delete without memory leak
}

AlgoContainer::iterator AlgoContainer::begin() const{
    return this->allTasks.begin();
}

AlgoContainer::iterator AlgoContainer::end() const{
    return this->allTasks.end();
}

void AlgoContainer::sort(){
    //TODO
}

任務.h

#ifndef Task_H_INCLUDED
#define Task_H_INCLUDED

class Task{
    public:
        Task(int pid, int arrivalTime, int burstDuration, int priority = 1);
        ~Task() = default;
        void alterBurstDuration(const int);
        int getPriority();
        int getPid();
        int getArrivalTime();
        int getBurstDuration();
        void continueWaiting();
        void taskComplete(const int);
    private:
        int pid;
        int arrivalTime;
        int burstDuration;
        int priority;
        int waitingTime;
        int finishedTime;
        enum state { waiting, running, finished};
        state taskState;
};

#endif /*TASK_H_INCLUDED*/

此外,這些是我正在編譯的參數,如果有幫助的話

CXX=g++
CXXFLAGS=-Wall -Wextra -Wpedantic -Werror -Wfatal-errors -Winit-self -Wshadow -Wcomment -Wctor-dtor-privacy -Wold-style-cast -D_GLIBCXX_DEBUG -fno-diagnostics-show-option -std=c++14

添加 std::iterator 編譯時出現錯誤

./AlgoContainer.h:14:8: fatal error: use of class template     'std::iterator' requires template
  arguments
            std::iterator begin() const;

再次奇怪的是,在我過去的項目中,我在迭代器之前沒有 std:: 並且沒有問題,沒有在標題中使用命名空間 std

我能夠通過將頭文件更改為

class AlgoContainer{
private:
    std::vector<Task> allTasks;
    void sort();
public:
    AlgoContainer() = default;
    void addTask(const Task);
    ~AlgoContainer();
    //CHANGE HERE
    using iterator = decltype(allTasks)::const_iterator;
    iterator begin() const;
    iterator end() const;

};

對於這是否令人不悅,共識是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM