나는 다음과 같은 코드를 가지고 :왜 이중으로 템플릿 클래스가 제대로 작동하지 않습니까?
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
template <class T> class Stack
{
private:
T a[1001];
int i=0,j;
public:
void pop(void)
{
a[i-1]=0.0;
a[i-1]='\0';
}
void push(T &x)
{
a[i++]=x;
}
void push(const char &x)
{
a[i++]=x;
}
void top(void)
{
cout<<a[i-1];
}
};
int main()
{
Stack<char>s1;
s1.push('a');
s1.push('b');
s1.top();
s1.pop();
cout<<"\n";
Stack<int>s2;
s2.push(10);
s2.push(20);
s2.top();
s2.pop();
cout<<"\n";
Stack<double>s3;
s3.push(5.50);
s3.push(7.50);
s3.top();
s3.pop();
cout<<"\n";
return 0;
}
출력 :
b
20
7
는 왜 두 번 대신 7.5 (7)을 보여주는거야?
내가 명시 적으로 double을 전문으로하고 참조 연산자를 사용하지 않으면 잘 작동합니다.
void push(double x)
{
a[i++]=x;
}
이렇게하면 정확한 출력을 얻을 수 있습니다. 하지만 이렇게하면 오류가 발생합니다.
void push(T x)
{
a[i++]=x;
}
void push(const char &x)
{
a[i++]=x;
}
어떻게 해결할 수 있습니까?
어떻게 올바른 출력을 두 번 표시 할 수 있습니까?
왼쪽 값 참조는 오른쪽 값에 바인딩 할 수 없습니다. – chris
또한, 당신은 아무것도 "전문"아니에요. –
OT,하지만'pop' 함수는 실제로'i'를 감소시키지 않습니다. –