Re: Class Template with Specialization code Giving Error
On Feb 21, 3:55 pm, Pallav singh <singh.pal...@gmail.com> wrote:
> Hi
>
> I am getting error in compiling this code .......Unable to find error
> Kindly suggest me something.
>
> Thanks
> Pallav
>
> ================================================== =================
>
> #include<iostream.h>
You should use <iostream> in place of iostream.h. For cout, you can
use
using std::cout;
>
> template<typename T>
> class B
> {
> public :
>
> T DependentName;
> int basefield;
> typedef int X;
>
> };
>
> template<>
> class B<char>
> {
>
> public :
> enum E{basefield = 1};
> int func()
> { return basefield;}
>
> };
>
> template<typename T>
> class D:B<T>
> {
> public :
> int func()
> { basefield = 12;
Two errors in this step (when instantiation of D<char> is done):-
1)C++ does not permit implicit conversion from int type to enum type.
That is you cannot write
enum R{A,B};
R x = 1;
2)basefield is an l-value, that is it is an integral constant, a
lvalue. So you cannot assign
any thing to it.
> return basefield; }
>
> };
>
> void call(D<int> & obj_int){
> cout<<"called function :: call(B<int> & obj_int) ::
> "<<obj_int.func()<<endl;}
>
> void call(D<char> & obj_char){
> cout<<"called function :: call(B<char> & obj_char)::
> "<<obj_char.func()<<endl;}
>
> int main()
> {
>
> D<char> obj_char;
> D<int> obj_int;
>
> call(obj_char);
> call(obj_int);
>
> return 0;
>
> }
Regards,
Reetesh Mukul
|