で宣言されていないあなたは重複としてこの質問をマークする前に、私はthisポストを見て、サイト上の他の類似のものを持っていたことを実感してください。私の問題は、可変スコープやプリプロセッサの仕組みを理解することではありません。私はそれらを持っている。C++変数のスコープ
私のコードでこの厄介な問題を理解することはできません。私はちょうどC + +を使用してスタックのデータ構造をモデル化しようとしています。コンパイラはsize
とcapacity
がこのスコープ内で宣言されていないと不平を続けています(Stack.cpp
)。 3つのファイルがあります。
- Stack.h
- Stack.cpp
- MAIN.CPP
以下は、ヘッダーファイルのコードスニペットと.cppファイルです:
Stack.h
#ifndef STACK_H_
#define STACK_H_
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Stack
{
public:
Stack();
void push(T item);
T pop();
private:
int size;
const int capacity = 10;
T items[];
};
#endif
Stack.cpp
#include "Stack.h"
using namespace std;
template<typename T>
Stack::Stack() : items[capacity]
{
size = 0;
}
template<typename T>
void Stack::push(T item)
{
if(size == capacity)
{
cout << "No more room left. Unable to add items.";
}
else
{
items[size-1] = item;
size++;
}
}
template<typename T>
T Stack::pop()
{
if(size == 0)
{
cout << "Stack is empty. There is nothing to remove.";
}
else
{
size--;
}
}
コンパイラはまた、妙に「『テンプレートクラスのスタックは、』テンプレートパラメータのボイドスタックなしで使用::プッシュ(Tアイテム)」と文句を言いあまり意味がありません、見てメンバ関数の前にテンプレートヘッダをどのように使用したかのように。
誰かが間違ったことを明確にしてもらえますか?
http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-fileがあなたをより良い方向に誘導します。また、テンプレート化されたtypenameはStackです。 –