テンプレートが int、double、または string のいずれであるかをユーザーが選択できるようにしようとしています。しかし、私のメソッドには継承の問題があります。If ステートメントを使用してクラス テンプレート オブジェクトを初期化しているため、メソッド呼び出しを行うたびにコンパイラがエラーをスローします。
template<class T>
class foo {
private:
int bar
public:
void setBar(int newBar);
};
template<class T>
void foo<T>::setBar(int newBar) {
bar = newBar;
}
int main() {
int inputType;
cout << endl << "1 for integer, 2 for double, 3 for strings." << endl <<
"What kind of data do you wish to enter?(1-3): ";
cin >> inputType;
if(inputType == 1) {
foo<int> v1;
} else if(inputType == 2) {
foo<double> v1;
} else if(inputType == 3) {
foo<string> v1;
} else {
cout << "Error - Please enter in a proper #: ";
}
//Compiler Error
v1.setBar(3);
return 0;
}
このようにしているので、 を呼び出そうとするたびに「v1 はこのスコープで宣言されていませんでした」というエラーが表示されますsetBar()
。これを乗り越えて、ユーザーがメソッド呼び出しを選択して許可できるようにするにはどうすればよいですか? テンプレートを使用していない場合は、if ステートメントの前に宣言するだけでよいことはわかっていますが、テンプレートを使用すると、コンパイラーは、最初に必要な型を伝えることを要求します。ありがとう!