我在头文件中编译prog程序时遇到错误,但我无法解决。
这是一个简单的链表程序,用户可以输入一个整数列表并将其显示出来。我将感谢所有的帮助。
这是我的头文件代码
#ifndef Linklist
#define Linklist
#include<cstdlib>
class linked_list {
public:
linked_list() {head = NULL; tail = NULL;}
void insert_front (int num);
bool empty() {return (head == NULL);}
private:
node *head;
node *tail;
};
以下是我获取时的错误
1>Compiling...
1>Linklist.cpp
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(20) : error C2143: syntax error : missing ';' before '*'
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(12) : error C2065: 'head' : undeclared identifier
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(12) : error C2065: 'tail' : undeclared identifier
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(15) : error C2065: 'head' : undeclared identifier
1>c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h(27) : fatal error C1070: mismatched #if/#endif pair in file 'c:usersalbertdocumentsvisual studio 2008projectslinklistlinklistlinklist.h'
1>Build log was saved at "file://c:UsersalbertDocumentsVisual Studio 2008ProjectsLinklistLinklistDebugBuildLog.htm"
1>Linklist - 10 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
这是我的程序实现
#include "linklist.h"
#include <iostream>
using namespace std;
int main()
{
void linked_list::insert_front (int num) {
node *head;
node *tail;
node *p;
int num;
head = NULL;
tail = NULL;
node *p = new node;
p->set_data ( num):
p->set_next ( head);
head = p;
for (int i=0; i<3; i++)
{
cout << "Enter number :";
cin >> num;
newNode = new nodeType; // Create the new node
newNode->data = num; // and assign its data value
newNode->link = NULL; // make its link point to nothing
if (first == NULL) // If there is nothing in the list, then make the
{
first = newNode; // newNode the first item and the last item
last = newNode;
}
else // Else if first already has a value
{
last->link = newNode; // make the last item link to the newNode
last = newNode; // and make newNode the last item
}
}
// Display the list
DisplayList(first);
system("PAUSE");
return(0);
}
您到处都在使用某种类型的node
,但它在程序中没有定义。你需要这样做。
此外,main()
中的嵌套函数还有一些有趣的业务。我不知道你是否打算那样做,但这确实很奇怪。
您在任何地方定义node
类吗?您还需要在头文件中包含它所在的文件,或者至少定义它:
class node;
class linked_list { ... };
另外,不要忘记头文件末尾的#endif
!
如果这不是某种家庭作业,请考虑使用std::list
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
std::cout << "Enter ints end with q" << std::endl;
std::list<int> l; //a deque is probably better TBH
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::inserter<int>(l, l.begin()));
std::copy(l.begin(), l.end(),
std::ostream_iterator<int>(std::cout, " "));
}
重写现有容器是个坏主意;同样在这个用例中,deque比列表更好。
我从未使用过VC++。。。但请尝试在公共节之前声明头文件中的私有节。。。节点是VC++中的内置数据类型吗?
类型node
不在作用域中。
您可能需要一个新的头文件node.h来定义丢失的类型,如果该类型将在其他地方使用的话。否则,您至少应该在列出的文件的顶部定义它。
更令人担忧的是,您没有理解正确缩进代码的重要性。在你这样做之前,像这样的问题会困扰你。