0

我有以下类设置,尝试模仿一个非常基本的堆栈。

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:{

                       }
                }
            }
        }
    }
}
4

1 回答 1

2

您的calc函数是一个带有 parameter 的函数模板T,但该参数不被任何函数参数使用——唯一的参数被定义为 a string,无论是什么类型T

T因此,当您这样调用时,编译器不能延迟calc

calc(input())

您需要明确指定T,例如:

calc<int>(input())

(当然,您应该使用任何有意义的数据类型而不是int.)

于 2012-10-10T06:19:05.737 回答