[英]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.