首先,我很抱歉如果我的代碼很糟糕,令人困惑。這就是說我一直在爲學校開展一個項目,我無法弄清楚我做錯了什麼。它與我一起將原始數組輸入到智能指針向量中。如果我需要發佈所有代碼,但我會嘗試分享看似相關的代碼。使用智能指點器進行分類時的問題
下面是所有的類定義等
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];
}
}
的約不能夠找出語法註釋下環是主要問題領域。當我嘗試編譯時,我得到了一個錯誤陳述的混亂。錯誤輸出如下。
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
這裏它將是一個類似的問題,但我仍然堅持。我覺得很蠢。
順便說一句,你正試圖排序一個非常糟糕的鏈表。使用數組列表來實現您的排序算法以獲得更好的性能。考慮如何避免使用矢量,因爲它會在算法中增加額外的開銷。 – ebasconp