gpt4 book ai didi

c++ - LinkedStack 及其模板类

转载 作者:行者123 更新时间:2023-11-28 03:07:45 25 4
gpt4 key购买 nike

所以,我开始自己在 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

最佳答案

您的问题是 header 之间的循环依赖:您有 header A 包含 header B,后者又包含 A(后者又包含 B,...)。

在您的示例中,您根本不需要那些#includes - 您可以通过前向声明来解决。在 LinkedNode.h 中,替换

#include"LinkedStack.h"

template <typename T> class LinkedStack;

同样在 LinkedStack.h 中,对 LinkedNode 使用前向声明。

关于c++ - LinkedStack 及其模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com