我正在編譯兩個文件,旨在構造和測試模板化堆棧類。 .h文件包含兩個ifndef結構,一個用於節點結構,另一個用於堆棧類。在單獨的節點和堆棧ifndefs是分配的要求,因爲措辭:in C++ - h文件中的兩個ifndef結構導致錯誤c2955使用類模板需要模板參數列表
名稱的Stack類,並在名爲Stack.h文件寫入其規格和功能 模板。使用動態數組或鏈接列表來實現該類,並確保包含動態的 內存管理。如果您使用鏈接列表,請使用Node作爲節點 結構名稱,並將其包含在Stack.h中,確保將其包含在其自己的#ifndef NODE/#endif容器的 中 - 這將防止編譯器 問題稍後寫一個隊列模板。
的問題我有,或者至少,我有問題之一,就是當我去編譯,我收到「錯誤c2955:‘堆’:使用類tempate的需要模板參數列表「(可能還有其他錯誤,但這是我覺得我需要先解決的主要問題之一)。這似乎是兩個ifndefs之間的問題?我會很感激任何人都可以幫助我。
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;''Stack' aStack;'。 –
Chnossos
這實際上是解決方案。這種情況很容易發生,但如果你願意將此作爲答案發布,我很樂意將其標記爲解決方案。 –