【发布时间】:2012-09-30 12:58:12
【问题描述】:
我有以下类设置,尝试模仿一个非常基本的堆栈。
template <class T>
class Stack{
public:
static const unsigned MAX_STACK_DEPTH =4;
Stack();
unsigned elements() const;
Stack<T> & push(T &value);
T pop();
Stack<T> & show();
private:
unsigned element;
T stack[MAX_STACK_DEPTH];
};
template <class T>
Stack<T>::Stack(){
element=0;
}
/*Other class function definitions*/
我的问题是我在 main 中收到以下错误
1 IntelliSense: no instance of function template "calc" matches the argument list c:\users\nima\documents\visual studio 2010\projects\calcu\calcu\policalc.cpp 109 6 Calcu
这是我的主要内容
int main(){
bool run=true;
while(run){
if(calc(input()));
}
}
这是另外两个函数声明
string input();
template <class T>
bool calc(string line);
这是我的 calc 函数,还没完成。
template <class T>
bool calc(string line){
static T Ans;
istringstream sin(line);
Stack stack;
for(string token; sin>>token){
T t;
if(parse(t, token)){
push(t);
}else{
if(token==operators[i]){
switch(i){
case 1:{
}
}
}
}
}
}
【问题讨论】:
-
如果 calc() 没有在其签名中使用 T,为什么它被声明为模板函数?我没有看到您在 main 中使用类 Stack 的位置。
-
你提供的堆栈模板在这里没用。但没有提供有用的计算实现。
-
我用 calc 函数更新了帖子。这有帮助吗? :/ 对此感到抱歉。
-
编译器如何知道你想要 calc 调用的 T 的值是多少?
-
你确定你只有一个错误吗?
标签: c++ class templates arguments main