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

私の問題は、メインで次のエラーが発生することです

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()));
    }
}

ここに他の2つの関数宣言があります

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

                       }
                }
            }
        }
    }
}
4

1 に答える 1

2

calc関数は parameter を持つ関数テンプレートですが、そのパラメーターは関数の引数のいずれにも使用されていません。型に関係なくT、唯一の引数が a として定義されています。stringT

したがって、次のようTに呼び出すと、コンパイラは延期できません。calc

calc(input())

を明示的に指定する必要がありますT。例:

calc<int>(input())

(もちろん、 の代わりに意味のあるデータ型を使用する必要がありますint。)

于 2012-10-10T06:19:05.737 に答える