作者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
1F:推 yehzu:link应该改为struct link 要不然就是要用typedef 08/24 11:22
2F:推 s2kip:同楼上 你的link都要加struct 或者你把struct的部分改成 08/24 13:05
3F:→ s2kip:typedef struct link_struct{ ... }link; 这样你後面就可以 08/24 13:05
4F:→ s2kip:直接用link 08/24 13:06
5F:→ s2kip:还有可以去C++版:) 这不是OS的问题~ 08/24 13:08
6F:→ uranusjr:他就是在 C/C++ 板问不到才跑过来的... 08/24 14:00
7F:→ uranusjr:link 在 Un*x 系统里是一个 function name (unistd.h), 08/24 14:02
8F:→ uranusjr:所以才会吐这个讯息 :Q 08/24 14:02
10F:→ Nozaki:了解~!终於可以跑了 感谢大家解惑orz 08/24 20:07
11F:推 s2kip:我直接开terminal写 用g++, link这个名字是没问题的 08/24 20:48
12F:→ s2kip:而前面是一定要加struct的 08/24 20:49