模板类变量在更改时出现段错误

问题描述 投票:0回答:1

我遇到的问题是我的

set_data()
功能。我试图将
data_field
变量设置为
d
,即传递到函数中的变量,但每当我尝试时,我都会遇到分段错误。

这是调用类的函数

对于测试运行变量

i
是一个 int,我试图将其添加到节点 data_field 中。
i
i 的 int 值为
i = 0

template<class T>
void dlist<T>::rear_insert(T i){

    dnode<T>* temp;

    temp -> set_data(i); // function call that is causing the segmentation fault

    if(tail == nullptr ){

        tail = temp;

        head = temp;

    } else {

        dnode<T>* temp1 = tail;
            
        tail -> set_next(temp);

        tail = tail -> next();

        tail -> set_previous(temp1);


    }

}

这是我在课堂上使用的完整代码,给我带来了错误

template<class T>
class dnode{

    public:

        dnode(T d = T(), dnode *n = NULL, dnode *p = NULL) {data = d;  next = n; previous = p;}

        void set_data(T d){
            

            data_field = d; //The line that gives 
                            //segmentation fault
            
        }

        void set_next(dnode *n){next_field = n;}

        void set_previous(dnode *p){previous_field = p;}

        T data()const {return data_field;}

        dnode* next() const {return next_field;}

        dnode* previous() {return previous_field;}

    private:
        T data_field;
        dnode* next_field;
        dnode* previous_field;

};

我使用 cout 来检查它是否接收到正确的数据,并且是否能够将正确的数据打印到文件中。问题在于

data_field = d
。我查看了其他来源,他们已经像我一样设置了代码,我不确定为什么我会遇到分段错误。

 void set_data(T d){

            cout << d;

            //data_field = d; 
            
 }

输出

0
,这是 d 的正确值。取消注释
data_field = d
会导致分段错误。

c++ templates variables
1个回答
0
投票

问题的答案是Darius在我问题的评论部分给出的

© www.soinside.com 2019 - 2024. All rights reserved.