LinkedStack и его шаблонный класс

0

Итак, я начал кодирование по LinkedStack для себя, и я, наконец, сужу, где произошла ошибка, но я не знаю, как это исправить. Я напишу свой код и ошибку здесь, посмотрим, сможет ли кто-нибудь понять. благодаря

LinkedNode.h

#pragma once
#include"LinkedStack.h"
#include<iostream>

template<class T>
class LinkedNode
{
    friend std::ostream& operator<<(std::ostream& os, const LinkedNode<T>& obj);
    friend class LinkedStack<T>;

    public:
        LinkedNode(T val);
        T GetElement() const {return element;}
        LinkedNode<T>* GetNext() const {return next;}
        void SetElement(T val) {element = val;}
        void SetNext(LinkedNode<T>* val) {next = val;}

    private:
        T element;
        LinkedNode<T>* next;
};

template<class T>
LinkedNode<T>::LinkedNode(T val):next(nullptr)
{
    element = val;
}

template<class T>
std::ostream& operator<<(std::ostream& os, const LinkedNode<T>& obj)
{
    os << "Element added is: " << obj.element;
    return os;
}

LinkedStack.h

#pragma once
#include<cassert>
#include"LinkedNode.h"

template<class T>
class LinkedStack
{
    public:
        LinkedStack();
        int GetSize() const {return size;}
        /*void SetSize(int val) {size = val;}
        bool IsTmpty() const {return size == 0;}
        void Push(T val);*/

    private:
        LinkedNode<T>* head; // This is where the errors occur, it does not accept
                                 // the generic type T for the LinkedNode class !!!
        int size;
};

template<class T>
LinkedStack<T>::LinkedStack():head(nullptr), size(0)
{
}

Это ошибки, вызванные VS2012:

Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   e:\fall 2013\cpsc 131\test\linkedstack\linkedstack.h    16
Error   3   error C2238: unexpected token(s) preceding ';'  e:\fall 2013\cpsc 131\test\linkedstack\linkedstack.h    16
Error   1   error C2143: syntax error : missing ';' before '<'  e:\fall 2013\cpsc 131\test\linkedstack\linkedstack.h    16
Теги:
stack

1 ответ

2
Лучший ответ

Ваша проблема связана с круговой зависимостью между заголовками: у вас заголовок A включает заголовок B, который, в свою очередь, включает A (который, в свою очередь, включает B,...).

В вашем примере вам вообще не нужны эти #includes - вы можете обойтись с помощью передовых объявлений. В LinkedNode.h замените

#include"LinkedStack.h"

с

template <typename T> class LinkedStack;

и аналогично в LinkedStack.h, используйте форвардное объявление для LinkedNode.

  • 0
    оно работает. Спасибо за вашу помощь
  • 0
    так что вы можете использовать предварительные объявления вместо #include заголовочного файла? Или он используется только в циклической зависимости между заголовками?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню