读取整数并将其显示回C++的简单链表



我在头文件中编译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来定义丢失的类型,如果该类型将在其他地方使用的话。否则,您至少应该在列出的文件的顶部定义它。

更令人担忧的是,您没有理解正确缩进代码的重要性。在你这样做之前,像这样的问题会困扰你。

相关内容

  • 没有找到相关文章

最新更新