看板 MAC 關於我們 聯絡資訊
寫基本的串列插入資料 用教科書的程式碼輸入 最後出現錯誤訊息: ISO C++ forbids declaration of 'link' with no type 想請大家解惑一下 找了一些資料還是看不懂... 板上有人用WINODOWS跑得出來 但我用Xcode就會跑出這樣的錯誤訊習.. 謝謝~! #include <iostream> // 請參閱9.4節說明 using namespace std; // 請參閱9.4節說明 class Student // 自定Student資料類別 { int student_id; char student_name[40]; public: friend istream& operator >> (istream& in, Student& obj) { in >> obj.student_id >> obj.student_name; return in; } friend ostream& operator << (ostream& out, Student& obj) { out << obj.student_id << '\t' << obj.student_name; return out; } }; struct link //定義link資料結構 { Student data; //Student型態資料 link *next; //link型態指標 }; class linklist //定義串列資料類別 { link *firstPtr; //串列起始指標 link *lastPtr; //串列結束指標 public: linklist() { firstPtr = lastPtr = NULL; } //建立者 void addFront (Student obj); //宣告插入第一項原型 void addBack (Student obj); //宣告插入最後項原型 void delFront(); //宣告刪除第一項原型 void delBack(); //宣告刪除最後項原型 void showItem(); //宣告顯示串列原型 }; void linklist::addFront (Student obj) //定義插入第一項函數 { link *newPtr = new link; newPtr->data = obj; if (firstPtr == NULL) { firstPtr = lastPtr = newPtr; lastPtr->next = NULL; } else { newPtr->next = firstPtr; firstPtr = newPtr; } } void linklist::addBack (Student obj) //定義插入最後項函數 { link *newPtr = new link; newPtr->data = obj; if (firstPtr == NULL) { firstPtr = lastPtr = newPtr; lastPtr->next = NULL; } else { lastPtr->next = newPtr; lastPtr = newPtr; lastPtr->next = NULL; } } void linklist::delFront() //定義刪除第一項函數 { link *tempPtr = firstPtr; if (firstPtr == NULL) return; else { firstPtr = firstPtr->next; delete tempPtr; } } void linklist::delBack() //定義刪除最後項函數 { link *tempPtr = lastPtr; if (firstPtr == NULL) return; else { if (firstPtr == lastPtr) firstPtr = lastPtr = NULL; else { link *currentPtr = firstPtr; while(currentPtr->next != lastPtr) currentPtr = currentPtr->next; lastPtr = currentPtr; lastPtr->next = NULL; } } delete tempPtr; } void linklist::showItem() //定義顯示串列資料函數 { link *currentPtr = firstPtr; while( currentPtr != NULL) { cout << currentPtr->data << endl; currentPtr = currentPtr->next; } } int main() { Student studata; //定義Student物件 linklist ls; //定義linklist物件 char n; cout << "1.插入第一項\n2.插入最後項\n" << "3.刪除第一項\n4.刪除最後項\n" << "0.結束\n"; while(1) { cout << "請選擇(1-4 或 0): "; cin >> n; switch (n) { case '1': cout << "請輸入學號與姓名:" ; cin >> studata; ls.addFront(studata); ls.showItem(); break; case '2': cout << "請輸入學號與姓名:" ; cin >> studata; ls.addBack(studata); ls.showItem(); break; case '3': ls.delFront(); ls.showItem(); break; case '4': ls.delBack(); ls.showItem(); break; case '0': return 0; } cout << endl; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 68.70.61.100
yehzu:link應該改為struct link 要不然就是要用typedef 08/24 11:22
s2kip:同樓上 你的link都要加struct 或者你把struct的部分改成 08/24 13:05
s2kip:typedef struct link_struct{ ... }link; 這樣你後面就可以 08/24 13:05
s2kip:直接用link 08/24 13:06
s2kip:還有可以去C++版:) 這不是OS的問題~ 08/24 13:08
uranusjr:他就是在 C/C++ 板問不到才跑過來的... 08/24 14:00
uranusjr:link 在 Un*x 系統裡是一個 function name (unistd.h), 08/24 14:02
uranusjr:所以才會吐這個訊息 :Q 08/24 14:02
Nozaki:瞭解~!終於可以跑了 感謝大家解惑orz 08/24 20:07
s2kip:我直接開terminal寫 用g++, link這個名字是沒問題的 08/24 20:48
s2kip:而前面是一定要加struct的 08/24 20:49