我在头文件中编译我的编程程序时遇到错误,我无法弄明白。
这是一个简单的链表程序,用户可以输入整数列表并将其显示回来。我将非常感谢所有的帮助。
Heres是我的头文件代码
#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:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C2143: syntax error : missing ';' before '*'
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C2143: syntax error : missing ';' before '*'
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(20) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(12) : error C2065: 'head' : undeclared identifier
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(12) : error C2065: 'tail' : undeclared identifier
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(15) : error C2065: 'head' : undeclared identifier
1>c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h(27) : fatal error C1070: mismatched #if/#endif pair in file 'c:\users\albert\documents\visual studio 2008\projects\linklist\linklist\linklist.h'
1>Build log was saved at "file://c:\Users\albert\Documents\Visual Studio 2008\Projects\Linklist\Linklist\Debug\BuildLog.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);
}
答案 0 :(得分:2)
你在整个地方都使用了某种类型的node
,但它没有在你的程序中的任何地方定义。你需要这样做。
此外,main()
中的嵌套函数还有一些有趣的业务。我不知道你是否打算这样做,但它确实很奇怪。
答案 1 :(得分:1)
您是否在任何地方定义node
班级?您还需要在头文件中包含它所包含的文件,或至少定义它:
class node;
class linked_list { ... };
另外,不要忘记头文件末尾的#endif
!
答案 2 :(得分:1)
如果这不是某种家庭作业,那么请考虑使用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优于列表。
答案 3 :(得分:0)
类型node
不在范围内。
如果在其他地方使用类型,您可能需要一个新的头文件 node.h 来定义缺少的类型。否则,您至少应该在列出的文件的顶部定义它。
更令人担忧的是,您不了解正确缩进代码的重要性。在你这样做之前,这样的问题会困扰你。
答案 4 :(得分:0)
我从未参与VC ++ ...但尝试在公共部分之前声明头文件中的私有部分...并且节点是VC ++中的内置数据类型吗?