Абсурдные ошибки с Visual Studio относительно нескольких классов - PullRequest
0 голосов
/ 21 ноября 2011

Я пытался реализовать структуру данных Piece Table, используя связанные списки в моем проекте.В моем проекте 7 файлов:

  • LinkedList.cpp

  • LinkedList.h

  • Node.cpp

  • Node.h

  • PieceTable.h

  • PieceTable.cpp

  • Main.cpp

Итак, проблема в том, что в моем классе PieceTable у меня есть член данных типа LinkedList.Все было хорошо до вчерашнего дня.Я построил проект несколько раз, и он работал хорошо.Сегодня утром я добавил одну функцию к LinkedList и еще одну к PieceTable.Когда я попытался построить его сверху, компилятор сказал:

1>c:\users\devjeet\documents\visual studio 2010\projects\piece table\piece table\piecetable.h(33): error C2079: 'PieceTable::dList' uses undefined class 'LinkedList'

dList - это имя члена класса типа LinkedList.Я даже поместил предварительное объявление класса, после чего компилятор сказал что-то, что означало:

LinkedList - неопределенный класс

Вот файлы заголовков:

PieceTable:

#ifndef PIECETABLE_H
#define PIECETABLE_H
#include <Windows.h>
#include <iostream>
#include "LinkedList.h"
#include "Node.h"

class LinkedList;

using namespace std;

class PieceTable
{
public:
    PieceTable(void);
    ~PieceTable(void);

    //buffer realated functions
    void setBuffer(char buffer[]);

    //printing functions
    void printBuffer();
    void printTable();


    //text insertion functions 
    void insertTextAfterPosition(char text, const int& position);
private:
    LinkedList dList;
    char* originalBuffer;
    char* editBuffer;
    int bufferLength;
    int editBufferCounter;

};
#endif

LinkedList:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include "Node.h"
#include "PieceTable.h"

class Node;

class LinkedList
{
public:
    LinkedList();
    ~LinkedList();

    bool isEmpty() const;

    //functions that deal with getting nodes
    Node* getNodeAtPosition(const int& position) const;
    Node* getFront() const;
    Node* getBack() const;
    Node* getHead()const;
    Node* getTail()const;
    Node* getNodeFromOffset(const int& offset) const;

    //functions that deal with adding nodes
    void append(const int offset, const int& length,const bool descriptor);
    void add(Node* node, const int offset, const int& length,const bool descroptor);                                //adds a node after the given node
    void insertNodeAfterPosition(const int offset, const int& length,const bool descriptor, const int& position);

    //function concerned with deletion
    void removeNode(Node* node);
    void deleteNodeAtPosition(const int& position);
    void removeBack();
    void removeFront();
    void emptyList();

    //debugging functions
    void printNodes();
private:
    Node* head;
    Node* tail;
};

#endif

Обратите внимание, что проблема возникает, использую ли я #pragma once или #ifndef/#endif

Спасибо,

Devjeet

1 Ответ

2 голосов
/ 21 ноября 2011

Это довольно прямое круговое включение: piecetable.h включает linkedlist.h, а linkedlist.h ошибочно включает piecetable.h. Я полагаю, что вы можете удалить второе включение и удалить предварительное объявление class LinkedList из piecetable.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...