Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LinkedStack及其模板类_C++_Stack - Fatal编程技术网

C++ LinkedStack及其模板类

C++ LinkedStack及其模板类,c++,stack,C++,Stack,因此,我开始为自己在LinkedStack上编码,最终我缩小了错误发生的范围,但我不知道如何修复它。我会在这里发布我的代码和错误,看看是否有人能找出答案。谢谢 LinkedNode.h #pragma once #include"LinkedStack.h" #include<iostream> template<class T> class LinkedNode { friend std::ostream& operator<<(std::

因此,我开始为自己在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;
}
#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)
{
}
#pragma一次
#包括“LinkedStack.h”
#包括
模板
类链接节点
{

friend std::ostream&operator您的问题是头之间的循环依赖关系:头a包含头B,而头B又包含头a(头B又包含头B,…)

在您的示例中,您根本不需要这些#include-您可以通过转发声明来处理。在
LinkedNode.h
中,替换

#include"LinkedStack.h"

模板类LinkedStack;

类似地,在
LinkedStack.h
中,对
LinkedNode

使用前向声明,这样您就可以使用前向声明而不是#include头文件?或者它仅用于头文件之间的循环依赖关系?您可以在类不完整的情况下使用前向声明。例如,您可以使用指针或者引用一个不完整的类,或者将一个类声明为友元。但是您不能创建该类的实例,或者访问其成员。为了打破循环依赖关系,转发声明通常是必要的,但这不是唯一可以使用它们的情况。
#include"LinkedStack.h"
template <typename T> class LinkedStack;