Проблемы, связанные с компиляцией приложения C ++ в g ++ (вероятная причина #ifndef) - PullRequest
1 голос
/ 15 августа 2011

Я пытаюсь создать приложение со связанным списком, используя язык программирования 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;

virtual listNode * insert ();

Правильно ли приведенное выше утверждение?

Спасибо Келли

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Проблема в вашем 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();
1 голос
/ 15 августа 2011

delete - это ключевое слово в C ++, его нельзя использовать как имя метода.Вам нужно использовать другое имя здесь:

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