für meine Klasse musste ich eine Klasse "List" implementieren, die std :: deque verwendet, um die Funktionalität einer Liste zu "modellieren" (fragt mich nicht warum). Diese Klasse muss eine Vorlagenklasse sein.Segmentierungsfehler: Kern gedumpt; std :: deque
Ich lese auch, wenn Sie Vorlagen für Klassen verwenden, ist die Trennung der Klasse in Header und CPP-Datei ein bisschen anders. Also habe ich alles in der Header-Datei implementiert.
Wenn ich jedoch ein Objekt von "List" instanziieren und die Elementfunktion "ins" verwenden, um etwas an meine Liste anzufügen, gibt es mir den Segmentierungsfehler nach dem Kompilieren.
Heres mein .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 */
und meine main.cpp:
#include <cstdlib>
#include "List.h"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
List <int> ListInt;
ListInt.ins(5);
return 0;
}
schätze ich jede Art von Hilfe oder konstruktive Kritik. Auch wenn etwas Wichtiges fehlt, zögern Sie nicht, lassen Sie es mich wissen.
Mit freundlichen Grüßen,
Dethe
Befreien Sie sich von 'pos' und' ptrPos' und ersetzen Sie beide durch 'deque :: iterator'. –
Nun, haben Sie mit dem Debugger Ihren Code durchgegangen, um einzuschränken, in welcher Zeile das 'SEGFAULT' tatsächlich auftritt? So weit für _ "konstruktive Kritik" _. –
Können Sie dies unter gdb ausführen und einen StackTrace erhalten? Ich glaube, du missbrauchst das 'pos'ptr durch. '* pos = x' versucht,' x' dem zuzuweisen, auf das 'pos' zeigt. Ich denke stattdessen wollen Sie 'pos = & x' verwenden, das die Adresse von' x' zu 'pos'zuweist. –