C++ 如何声明放在main之后的类模板?
我试图实现一个模板类,它是堆栈。但我想在主机场前申报。我可以这样做吗?我知道如果你把main放在模板之后,它会编译,但是有可能先把main放在模板之后吗C++ 如何声明放在main之后的类模板?,c++,templates,C++,Templates,我试图实现一个模板类,它是堆栈。但我想在主机场前申报。我可以这样做吗?我知道如果你把main放在模板之后,它会编译,但是有可能先把main放在模板之后吗 #include <iostream> //start declaration of template template <class T> class stack<T>; //end declaration of template int main() { stack<char>
#include <iostream>
//start declaration of template
template <class T>
class stack<T>;
//end declaration of template
int main() {
stack<char> s(5);
s.push('a');
s.push('b');
cout <<s.pop()<<endl;
stack<double> s1(10);
s1.push(3.2);
s1.push(0.5);
cout << s1.pop()<<endl;
return 0;
}
template <class T>
class stack {
T *s;
int size; //How many elements I can stole.
int top; //Where the index is available.
public:
stack(int sz) {
size = sz;
s = new T[sz];
top=-1;
}
void push(T e);
T pop() {
return s[top--];
}
};
template <class T>
void stack<T>::push(T e) {
s[++top] = e;
}
#包括
//模板的开始声明
模板
类堆栈;
//模板的结束声明
int main(){
堆栈s(5);
s、 推(a);
s、 推动('b');
cout你就快到了。语法是:
template <class T>
class stack;
模板
类堆栈;
但是,与任何类声明一样,如果您使用它需要完整的定义,那么它是不够的。实例化模板并使用其成员函数就是这样一种情况,所以这次您运气不好。声明模板的正确语法是,正如昆汀已经指出的:
template <class T>
class stack;
模板
类堆栈;
但这对你没有帮助,因为:
是否可以先放置主模板,然后再放置模板
#include <iostream>
//start declaration of template
template <class T>
class stack<T>;
//end declaration of template
int main() {
stack<char> s(5);
s.push('a');
s.push('b');
cout <<s.pop()<<endl;
stack<double> s1(10);
s1.push(3.2);
s1.push(0.5);
cout << s1.pop()<<endl;
return 0;
}
template <class T>
class stack {
T *s;
int size; //How many elements I can stole.
int top; //Where the index is available.
public:
stack(int sz) {
size = sz;
s = new T[sz];
top=-1;
}
void push(T e);
T pop() {
return s[top--];
}
};
template <class T>
void stack<T>::push(T e) {
s[++top] = e;
}
只有在不使用main
中的模板时,才能执行此操作
但是您确实使用了模板,所以不,您不能这样做。模板必须在实例化之前定义。但是,如果您愿意,您可以将成员函数的定义保留在main
之后。您为什么要这样做?我的老师让我这么做。@PatrykWertka这是一件非常有效的事情。为什么不是吗?因为,除了练习之外,知道这一点也没什么用。@PatrykWertka说类声明是无用的,这是一个非常大胆的说法:)如果我这样做,它会给我以下信息:classTemppers.cpp(10):错误C2079:'s'使用未定义的类'堆栈'
template <class T>
class stack;
template <class T>
class stack;