首先,如果我的代码太可怕而令人困惑,我很抱歉。那说我一直在做一个学校的项目,我无法弄清楚我做错了什么。它与我将原始数组输入智能指针向量有关。如果我需要发布我将要发布的所有代码,但我将尝试分享看似相关的代码。
以下是所有类定义等。
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
非常感谢任何帮助。知道它可能是非常简单的东西。我知道这与将数据输入智能指针向量有关,但我只是完全卡住了。
我停止引用temp后出现新错误消息。
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
这将是一个类似的问题,但我仍然卡住了。我感到非常愚蠢。
答案 0 :(得分:0)
有时,可怕的C ++错误消息的关键是看看它试图转换为什么。在这里,它首先尝试将node
转换为node*
。这意味着它正在寻找一个指针,但你没有给它一个。
请停止取消引用temp
。