私は3つのファイルを持っているので、コンパイルして実行したいが、いくつかのエラーと警告が出てくる。構造体ノード< T>の再定義。テンプレートについてはあまりよく分かりませんが、これは私には正しいと思われます。そして、何が間違っているのか理解しようと多くの時間を費やしました。ありがとう。あなたがリストになかったテンプレートの問題
//mystack.h
#ifndef MYSTACK_H
#define MYSTACK_H
template <class T>
struct Node
{
T info;
T *next;
};
template <class T>
class MyStack
{
private:
struct Node<T> *top;
public:
void Push(T item);
void Pop();
int Top();
void Print();
};
#endif
//mystack.cpp
#include <iostream>
#include "mystack.h"
template <class T>
struct Node
{
T info;
T* next;
};
template <class T>
class MyStack
{
private:
struct Node<T>* top;
public:
void Push(T item)
{
if(top == NULL)
{
top = new(struct Node<T>);
top->info = item;
top->next = NULL;
} else
{
Node<T>* temp;
temp = top;
top = new(struct Node<T>);
top->info = item;
top->next = temp;
}
}
void Pop()
{
if(top == NULL)
{
} else
{
Node<T>* temp;
temp = top->next;
delete top;
top = temp;
}
}
int Top()
{
return top;
}
void Print()
{
if(top != NULL)
{
Node<T>* temp;
temp = top;
while(temp != NULL)
{
std::cout << temp << std::endl;
temp = temp->next;
}
}
}
};
両方のファイルに構造体を定義する必要はありませんか?クラスはどうですか? –
すべてのインクルードファイルにタイプ定義を1回だけ含めることができます。これは構造体だけでなく、クラスや他の型定義コードも考慮します。 – fyr