Шаблоны классов и основной

У меня есть следующая установка класса, которая пытается имитировать очень простой стек.

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

Вот моя функция 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:{

}
}
}
}
}
}

0

Решение

Ваш calc функция — это шаблон функции с параметром T, но этот параметр не используется ни одним из аргументов функции — единственный аргумент определяется как stringнезависимо от того, какой тип T является.

Поэтому компилятор не может отложить T когда ты звонишь calc как это:

calc(input())

Вам нужно явно указать TНапример:

calc<int>(input())

(Конечно, вы должны использовать любой тип данных, который имеет смысл вместо int.)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]