对于我的班级,我必须实施一个班级" List"它使用std :: deque来"模型"列表的功能(不要问我为什么)。该类需要是模板类。
我还读过,如果你在类上使用模板,那么header和.cpp文件中的类的分离有点不同。所以我在头文件中实现了所有内容。
但是,如果我实例化" List"的对象并使用成员函数" ins"要在我的列表中附加内容,它会在编译后给出分段错误。
继承人我的.h:
#ifndef LIST_H
#define LIST_H
#include <deque>
#include <iostream>
template <typename T>
class List {
public:
List();
void del();
void ins(T x);
void adv();
void end();
void reset();
void setEnd();
T get();
private:
std::deque<T>deque;
T *pos;
int ptrPos = 0;
T element;
};
template <typename T>
List<T>::List(){};
template <typename T>
void List<T>::ins(T x){
deque.push_back(x);
*pos = x;
ptrPos++;
}
template <typename T>
void List<T>::del(){
deque.erase(ptrPos);
*pos = deque.at(ptrPos);
}
template <typename T>
void List<T>::adv(){
ptrPos++;
*pos = deque.at(ptrPos);
}
template <typename T>
void List<T>::end(){
if(ptrPos == deque.size()){
std::cout << "Der Positionszeiger zeigt auf das Ende der Liste" << std::endl;
}else{
std::cout << "Der Positionszeiger zeigt NICHT auf das Ende der Liste" << std::endl;
}
}
template <typename T>
void List<T>::setEnd(){
ptrPos = deque.size();
*pos = deque.at(ptrPos);
}
template <typename T>
T List<T>::get(){
return deque.at(ptrPos);
}
template <typename T>
void List<T>::reset(){
*pos = deque.at(1);
ptrPos = 1;
}
#endif /* LIST_H */
和我的main.cpp:
#include <cstdlib>
#include "List.h"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
List <int> ListInt;
ListInt.ins(5);
return 0;
}
我感谢任何帮助或建设性的批评。 如果遗漏任何重要内容,请随时告诉我。
致以最诚挚的问候,
与Dethe
答案 0 :(得分:0)
您的问题是*pos = x;
,而不是std::deque
。构造ListInt
时,使用默认构造函数,该构造函数不会初始化pos
。执行*pos = x;
时,取消引用未初始化的指针,该指针是未定义的行为并导致崩溃。
我不确定您尝试使用pos
是什么,但它看起来根本不需要指针。