与g ++中的C ++应用程序编译有关的问题(可能的原因#ifndef)

时间:2011-08-15 05:14:37

标签: c++ g++ compilation

我正在尝试使用C ++编程语言构建一个链接列表应用程序。继承等功能

我拆分界面&在不同的文件中实现但无法编译。

以下是文件列表

接口文件: - node.h,abstractList.h,singleLinkedList.h

实施文件:singleLinkedList.cpp

node.h

#ifndef NODE_H
#define NODE_H

#include <iostream>

struct nodeType {
        int data;
        struct nodeType *next;
}listNode;


#endif

abstractList.h

#ifndef ABSTRACT_LIST_H
#define ABSTRACT_LIST_H

#include <iostream>
#include "node.h"
#include "singleLinkedList.h"

class abstractList {
        public:
        virtual ~abstractList();
        virtual bool isEmpty(Node* ) = 0;
        virtual int get(const int&) = 0;
        virtual int indexOf(const int& ) = 0;
        virtual Node insert(const int& , const int& ) = 0;
        virtual void delete(const int& ) = 0;
};

#endif

singleLinkedList.h

#ifndef SINGLE_LIST_H
#define SINGLE_LIST_H

#include <iostream>
#include "node.h"
#include "abstractList.h"

class singleLinkedList : public abstractList {

        public:

        singleLinkedList();
        ~singleLinkedList();
        Node populateList( );

        private:

        void checkIndex();
        int data;
        Node head;
};

#endif

到目前为止,我刚刚在实现文件中编写了populateList()函数,这里是实现文件。

singleLinkedList.cpp

#include <iostream>
#include "node.h"
#include "singleLinkedList.h"
#include "abstractList.h"


    Node singleLinkedList :: populateList()
    {
            Node temp;
            int data;
            temp = head;
            char ch;
            std::cout<<"Enter Data? (y/n) " << std::endl;
            std::cin>>ch;

            while(ch == 'Y' || ch == 'y')
            {
                    std::cout<<"Enter the data that you would like to store.\n"<<std::endl;
                    std::cin>>data;
                    temp = new Node();
                    temp->data = data;
                    temp->next = head;
                    head = temp;
                    std::cout<<"Enter more data?"<<std::endl;
                    std::cin>>"\n">>ch;
            }

            return temp;
    }

当我给g ++ -c singleLinkedList.cpp时,我遇到了很多错误。我很确定我做了些蠢事。任何人都可以指出我的错误吗?

编辑:错误日志有特定问题。

struct nodeType {
int data;
struct nodeType *next;
}listNode;

虚拟listNode * insert();

以上陈述是否正确?

由于 凯利

2 个答案:

答案 0 :(得分:1)

delete是C ++中的关键字,您不能将其用作方法名称。您需要在此处使用其他名称:

class abstractList {
        public:
        //...
        virtual void delete(const int& ) = 0;
        //-----------^^^^^^ rename this.
};

答案 1 :(得分:1)

问题在于你的typedef:

typedef listNode *Node;

表示Node的所有实例都将基本上由listnode*

取代
  temp = new Node();

实际上是

  temp = new listnode*();

但是new Foo()会返回一个Foo *(因为new返回指向为对象分配的内存的指针),这意味着new listnode*()将返回listnode**temp成为listnode*并不知道listnode**是什么并抱怨。

你想要做的是:

 Node temp = new listnode();

或完全忘记typedef:

 listnode* temp = new listnode();