Afficher un message
Vieux 21/02/2008, 12h50   #7
Reetesh Mukul
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Class Template with Specialization code Giving Error

On Feb 21, 4:47 pm, Pallav singh <singh.pal...@gmail.com> wrote:
> On Feb 21, 4:41 pm, Reetesh Mukul <reetesh.mu...@gmail.com> wrote:
>
>
>
> > On Feb 21, 4:36 pm, Pallav singh <singh.pal...@gmail.com> wrote:

>
> > > On Feb 21, 4:26 pm, Reetesh Mukul <reetesh.mu...@gmail.com> wrote:

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

>
> > > ---------------------------------------------------------------------------------

>
> > > Hi

>
> > > as my knowledge with char ...it should look to Base class Specialized
> > > function
> > > where i am Not doing any assignment but access

>
> > The what about the assignment in D<char>::func() ...
> > basefield = 1;

>
> > > while it should call generalized Base class for Other cases where i
> > > did assigment

>
> > > Thanks
> > > Pallav

>
> > I am not able to get your point, can you explain.

>
> > Regards,
> > Reetesh Mukul

>
> --------------------------------------------------------------------------
>
> thats beauty of Specialization when i call B<char> it will call
> specialized base class for char
> Variable / functionality of specialized class has No relation with
> Generalized Base Class
>
> when i call B<int> , B<bool> ---------It call generalized Base Class
> while when i call B<char> ----------- It should call my Specialized
> Base Class
>
> U can see Above in the Code ........ I Have written two class B
>
> Thanks
> pallav


Have you read my replies ? I think you are not seeing the D<char>
thing that I have written above.

Ofcourse that is why it is called specialization.

Regards,
Reetesh mukul
  Réponse avec citation
 
Page generated in 0,07735 seconds with 9 queries