作者Nozaki (NA)
看板MAC
標題[軟體] 寫c++跑出 ISO C++ fordbids declaration with no type
時間Wed Aug 24 10:18:13 2011
寫基本的串列插入資料 用教科書的程式碼輸入 最後出現錯誤訊息:
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