下午,伙计们和男孩们。
所以我现在正在研究一个通用集,试图让我的拷贝构造函数起作用。我有一个节点类完成。我现在对我来说似乎有些意义,但它仍然没有用......
当然,我仍然在链接列表方面遇到问题。
template<class T>
set<T>::set(const set<T> & other) {
if(other.head == NULL) { head = NULL; }
else {
node <T> * s_ptr;
node <T> * d_ptr;
head = new node;
head -> get_data() = other.head -> get_data();
s_ptr = other.head -> set_link();
d_ptr = head;
while (s_ptr != NULL) {
d_ptr -> set_link() = new node;
d_ptr = d_ptr -> set_link();
d_ptr -> data = s_ptr -> get_data();
s_ptr = s_ptr -> link();
} //end while
d_ptr -> set_link() = NULL;
} //end else
}
提前感谢您的帮助。你们真棒。
编辑:
这是设置链接的代码:
void set_link(node * n){link = n;}
这是获取数据的代码:
T get_data(){return data;}
编辑2:
它不是为我编译的。在声明new node
的行上我收到错误:
expected type specifier before node
expected ';' before node
我在某个地方错过<T>
吗?
答案 0 :(得分:1)
d_ptr->link()
看起来很有趣。应该是d_ptr->link
。对于link
编辑:如果link
是会员功能,您如何使用例如d_ptr -> link = new node;
我认为我们需要查看节点类 - 或者您需要粘贴正确的代码。
EDIT2:响应编译器错误:
new node;
应为new node<T>;
答案 1 :(得分:0)
行是什么
d_ptr = d_ptr -> link();
应该怎么做?此时d_ptr是新构造的,可能是它的链接为NULL。其余部分对我来说看起来不错(除了Erik指出的链接vs link())。
答案 2 :(得分:0)
如果你把它称为函数,我唯一能想到的就是链接问题。
如果链接真的是一个函数并且它有一个像node* link()
这样的原型那么就会出现问题但是你的代码没有问题;
这样的代码也应该起作用
template <class T> class node
{
node*& link()
{
return *this;
}
}
答案 3 :(得分:0)
head=new node<T>;
if(rhs.head!=NULL)
{
node<T> *temp =new node<T>;
node<T> *temp2=new node<T>;
head->set_data(rhs.head->get_data());
temp2=rhs.head->get_link();
temp=head;
while(temp2!=NULL)
{
temp->set_link(new node<T>);
temp=temp->get_link();
temp->set_data(temp2->get_data());
temp2=temp2->get_link();
}
}
else
{
head==NULL;
}
您不能将函数用作变量。