在一个h文件中的两个ifndef结构导致错误c2955使用类模板需要模板参数列表
in two ifndef structures in an h file leading to error c2955 use of class template requires template argument list
我正在编译两个文件,用于构造和测试一个模板化的堆栈类。h文件包含两个ifndef结构,一个用于节点结构,另一个用于堆栈类。单独的节点和堆栈ifndef是赋值的要求,如:
将你的类命名为Stack,并编写它的规范和函数模板在名为Stack.h的文件中。使用动态数组或链表来实现类,并确保包含动态内存管理。如果使用链表,则使用Node作为节点结构名,并将其包含在Stack.h中,并确保将其包含在它自己的#ifndef NODE/#endif容器——这将阻止编译器以后编写队列模板时的问题。
我遇到的问题,或者至少,在我遇到的问题中,是当我去编译时,我得到"错误c2955: '堆栈':使用类模板需要模板参数列表"(可能还有其他错误,但这是主要的一个我觉得我需要在我可以前进之前解决)。这看起来像是两家公司之间的问题。我很感激任何人能给我的帮助。
Stack.h
#ifndef Node
#define Node
template <class DataType>
struct Node
{
DataType data;
Node<DataType>* next;
};
#endif
#ifndef Stack_h
#define Stack_h
template <class DataType>
class Stack
{
private:
Node<DataType>* start;
Node<DataType>* end;
public:
// constructors (inline)
Stack()
:start(0)
{
}
// getters (inline)
bool isEmpty() const
{
return 0 == start;
} // getter
// setters
/* push */ void Stack<DataType>::push(const DataType& parameter);
/* peek */ bool Stack<DataType>::peek(DataType& parameter) const;
/* pop */ bool Stack<DataType>::pop(DataType& parameter);
/* empty */ void Stack<DataType>::makeEmpty( );
};
template <class DataType>
void Stack<DataType>::push(const DataType& parameter)
{
Node<DataType>* node = new Node<DataType>;
node->data = parameter;
node->next = start;
start = node;
}
template <class DataType>
bool Stack<DataType>::peek(DataType& parameter) const
{
if (0 == start) return false; // failed
parameter = start->data;
return true; // success
}
template <class DataType>
bool Stack<DataType>::pop(DataType& parameter)
{
if (0 == start) return false; // failed
parameter = start->data;
Node<DataType>* p = start->next;
delete start;
start = p;
return true; // success
}
template <class DataType>
void Stack<DataType>::makeEmpty()
{
Node<DataType>* p;
while (start)
{
p = start->next;
delete start;
start = p;
}
}
#endif
StackDriver.cpp
#include <iostream>
using namespace std;
#include "Stack.h"
#include "Stack.h" // testing ifndef
int main()
{
cout << "Testing: creating a new int stack, adding one data value to it, then retrieving (via peep) that data" << endl << endl;
cout << "Data to be added - 100, same data should be returned" << endl << endl;
Stack aStack<int>;
aStack.push( 100 );
int dataReturn;
aStack.peek( dataReturn );
cout << "returned data is " << dataReturn << endl << endl;
}
错误
使用类模板需要模板参数列表
表示您实际尝试使用您的类而没有对其进行专门化:
Stack aStack<int>;
必须改为Stack<int> aStack;
这是一个问题:
#define Node
template <class DataType>
struct Node
{
第一行将Node
替换为空。
所以当编译器到达你后面的代码时它只看到:
template <class DataType>
struct
{
,它不做你想做的,并导致你的错误。
要解决这个问题,请正确使用include保护符。每个头文件只使用一个保护。保护的目的是让编译器知道,如果已经读取了头文件,就不读取它。
我还建议使用全大写的名称,这样就不会在包含保护和文件中的有效令牌之间发生冲突。头文件应该看起来像:
// (First line of header)
#ifndef H_STACK
#define H_STACK
// all code goes here
#endif // H_STACK
// (last line of header)
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- c2955 错误 - 使用类模板 reuires 参数列表
- 错误 c2955:使用 c++ 模板
- 错误C2955和错误C2244使用c++模板
- 在一个h文件中的两个ifndef结构导致错误c2955使用类模板需要模板参数列表
- errorC2512和错误C2955使用c++模板