寫c++跑出 ISO C++ fordbids declaration with no type - MAC

Hedda avatar
By Hedda
at 2011-08-24T10:18

Table of Contents

寫基本的串列插入資料 用教科書的程式碼輸入 最後出現錯誤訊息:

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;
}
}

--
Tags: MAC

All Comments

Robert avatar
By Robert
at 2011-08-29T09:19
link應該改為struct link 要不然就是要用typedef
Aaliyah avatar
By Aaliyah
at 2011-09-02T02:24
同樓上 你的link都要加struct 或者你把struct的部分改成
typedef struct link_struct{ ... }link; 這樣你後面就可以
Steve avatar
By Steve
at 2011-09-04T04:40
直接用link
Enid avatar
By Enid
at 2011-09-06T08:38
還有可以去C++版:) 這不是OS的問題~
Iris avatar
By Iris
at 2011-09-09T22:49
他就是在 C/C++ 板問不到才跑過來的...
Doris avatar
By Doris
at 2011-09-11T08:56
link 在 Un*x 系統裡是一個 function name (unistd.h),
所以才會吐這個訊息 :Q
See http://ubuntuforums.org/showthread.php?t=1022149
Kristin avatar
By Kristin
at 2011-09-14T20:21
瞭解~!終於可以跑了 感謝大家解惑orz
Andrew avatar
By Andrew
at 2011-09-16T23:41
我直接開terminal寫 用g++, link這個名字是沒問題的
Adele avatar
By Adele
at 2011-09-21T08:47
而前面是一定要加struct的

Fluid App幫你把網頁變成App

Agatha avatar
By Agatha
at 2011-08-24T09:57
http://fluidapp.com/ 有免費版本可以使用 基本上他會叫你選擇三樣東西 網址、程式名稱、icon 然後就會造出一個.app 簡單的說 他只是把你指定的網頁外加一個簡單的瀏覽器一起包成一個.app 好不好用就見仁見智 像我會希望某些網頁可以獨立出來出現在Dock 最近 ...

Time machine 備份時間點?以及是否釋出容量?

Emily avatar
By Emily
at 2011-08-24T03:48
各位板友好, 最近這兩天剛開始使用 Time machine, 有一些疑問想請教一下。 如果不使用其他軟體控制的話,TM 內建的備份時間點是: 過去二十四小時內每小時備份, 過去一週內的每日備份, 以及所有月份的每週備份。 意思是不是說, 如果從昨天凌晨零點五分開始做第一份備份, 到今天凌晨零點五分之後 ...

2010" MBP 硬碟升級選擇

Susan avatar
By Susan
at 2011-08-24T01:26
※ 引述《nicklin04 (三葉幸運草)》之銘言: : 最近想換硬碟 : 我的MBP 是2010and#34;的 : 想問 是不是只要是9mm的就都可以裝 沒有容量大小跟轉速問題atat? : (不過9mm的最大是只到750G嗎......?) : 本來是想買Seagate的混合碟(500G) : 因為現 ...

Lion下用拖拉的方式開啟檔案無效

Catherine avatar
By Catherine
at 2011-08-24T00:30
因為用文字很難描述,麻煩看一下螢幕錄製的示範:http://cl.ly/9YGd 簡單說就是開啟檔案時, 想要直接將已經打開的其他 Finder 視窗裡的檔案, 拉進「開啟檔案」的那個視窗裡, 以達到「開啟這個檔案」的效果。 對我來說這個拉檔案的動作,在工作上省了很多時間, 也一直是我認為 OS X 勝過 ...

在圖形介面資料夾下 command line

Freda avatar
By Freda
at 2011-08-23T23:21
記得有個小程式是可以讓人在圖形介面資料夾下 直接下 command line 指令的 但是熊熊忘記名字 google 也出來一些不相關的 可以請強者板友指點一下嗎? thanks - ...