首先,如果我的代码太糟糕和令人困惑,我很抱歉。也就是说,我一直在为学校做一个项目,我不知道自己做错了什么。这与我将原始数组馈送到智能指针向量有关。如果我需要发布所有的代码,我会的,但我会尝试分享似乎相关的代码。
以下是所有类别定义等。
template <typename T>
class sptr {
public:
sptr(T *_ptr=NULL) { ptr = _ptr;}
bool operator < (const sptr &rhs) const
{ return *ptr < *rhs.ptr;}
private:
T *ptr;
};
template <class T>
class slist {
private:
struct node {
node() { data=T(); next=NULL; }
// add overloaded operator< code
bool operator<(node rhs){
if(data < rhs.data)
return true;
return false;
}
T data;
node *next;
};
public:
class iterator {
public:
iterator() : p(NULL) {}
T & operator*() { return p->data; }
iterator & operator++() { p = p->next; return *this; }
bool operator!=(const iterator & rhs) const { return p != rhs.p; }
private:
friend class slist<T>;
iterator(node *p) : p(p) {}
node *p;
};
public:
slist();
~slist();
void push_back(const T &);
void sort();
iterator begin() { return iterator(head->next); }
iterator end() { return iterator(NULL); }
int N;
private:
node *head;
node *tail;
};
这是实际的分拣代码
void slist<T>::sort()
{
// set up smart point array for list
vector<sptr<node> > Ap(N);
iterator it;
node *temp = head->next;
// Couldnt figure out syntax of assigning values to the array
for(int i = 0; i < N; i++){
sptr<node> temp2(*temp);
Ap[i] = temp2;
temp = temp->next;
}
// apply std::sort
std::sort(Ap.begin(), Ap.end());
// relink linked list using sort result
node *ptr = head->next;
for(int i=0; i < N; i++){
ptr = Ap[i];
ptr -> next = Ap[i+1];
}
}
关于无法理解语法的评论下的for循环是主要的问题领域。当我试图编译时,我得到了一个混乱的错误语句。错误输出如下。
sort3b.cpp: In member function 'void slist<T>::sort() [with T = record]':
sort3b.cpp:217:18: instantiated from here
sort3b.cpp:166:25: error: no matching function for call to 'sptr<slist<record>::node>::sptr(slist<record>::node&)'
sort3b.cpp:166:25: note: candidates are:
sort3b.cpp:69:2: note: sptr<T>::sptr(T*) [with T = slist<record>::node]
sort3b.cpp:69:2: note: no known conversion for argument 1 from 'slist<record>::node' to 'slist<record>::node*'
sort3b.cpp:67:7: note: sptr<slist<record>::node>::sptr(const sptr<slist<record>::node>&)
sort3b.cpp:67:7: note: no known conversion for argument 1 from 'slist<record>::node' to 'const sptr<slist<record> ::node>&'
sort3b.cpp:217:18: instantiated from here
sort3b.cpp:177:3: error: cannot convert 'sptr<slist<record>::node>' to 'slist<record>::node*' in assignment
sort3b.cpp:178:3: error: cannot convert 'sptr<slist<record>::node>' to 'slist<record>::node*' in assignment
make: *** [sort3b] Error 1
如有任何帮助,我们将不胜感激。了解我可能很简单。我知道这与将数据输入智能指针向量有关,但我完全陷入了困境。
我停止引用临时后的新错误消息
sort3b.cpp: In member function 'void slist<T>::sort() [with T = record]':
sort3b.cpp:217:18: instantiated from here
sort3b.cpp:177:3: error: cannot convert 'sptr<slist<record>::node>' to 'slist<record>::node*' in assignment
sort3b.cpp:178:3: error: cannot convert 'sptr<slist<record>::node>' to 'slist<record>::node*' in assignment
这将是一个类似的问题,但我仍然被卡住了。我觉得自己很笨。
有时,可怕的C++错误消息的关键是查看它试图转换为什么。在这里,它首先尝试将node
转换为node*
。这意味着它在寻找一个指针,但你没有给它一个。
因此,停止取消引用temp
。