所以我在这里的功能上遇到了分段错误,我不确定如何纠正它。关于我如何去做的任何线索? 我包括我的课程,然后是下面的功能,让我知道我的课程。 谢谢!
template <typename T>
class Element{
private:
Element *next_ = nullptr;
string name_ = "";
T color_ = T();
public:
Element()=default;
Element(string name, T d) : next_(nullptr), name_(name), color_(d){};
friend ostream& operator<<(ostream& out, Element& n){
out << n.name_ << ":" << n.color_;
return out;
}
friend class PAL<T>;
};
template<typename T>
class PAL{
private:
Element<T> *back_ = nullptr;
Element<T> *front_ = nullptr;
void print_list(ostream& out);
public:
PAL()=default;
PAL(Element<T> n) : back_(&n), front_(&n) {};
PAL(string n, T d);
PAL(const PAL&);
PAL& operator=(PAL);
~PAL();
void add(Element<T> &n);
void add(string name, T dat);
pair<Element<T>*, Element<T>*> find(string name);
pair<Element<T>*, Element<T>*> find(Element<T> &n);
void move_forward1(Element<T> &n);
void move_to_front(Element<T> &n);
void move_back1(Element<T> &n);
void move_to_back(Element<T> &n);
friend ostream& operator<<(ostream& out, PAL<T>& sl){
sl.print_list(out);
return out;
};
};
template<typename T>
pair<Element<T>*, Element<T>*> PAL<T>::find(string name){
pair<Element<T>*, Element<T>*> *result (nullptr);
Element<T>* x = nullptr;
Element<T>* y = nullptr;
for (Element<T> *n = back_; n != nullptr; n = n -> next_){
if (n -> name_ == name){
x = n;
cout << x;
break;
}
y = n;
}
result -> first = x;
result -> second = y;
return *result;
}
答案 0 :(得分:1)
pair<Element<T>*, Element<T>*> *result (nullptr);
接着是
result -> first = x;
result -> second = y;
return *result;
是个问题。
您尚未为result
分配内存,并继续使用它,就像它指向有效对象一样。
简化它。完全删除result
并将return
语句更改为:
return {x, y};