模板类和主要

时间:2012-10-10 05:57:34

标签: c++ class templates arguments main

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

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*/

我的问题是我在主

中收到以下错误
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);

这是我的计算功能,它还没有完成。

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

                       }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的calc函数是一个带参数T的函数模板,但任何函数参数都不使用该参数 - 唯一的参数定义为string,无论如何T的类型是什么。

因此,当您像这样调用T时,编译器无法推迟calc

calc(input())

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

calc<int>(input())

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