![]() |
Class Template with Specialization code Giving Error
Hi
I am getting error in compiling this code .......Unable to find error Kindly suggest me something. Thanks Pallav ================================================== ================= #include<iostream.h> 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; 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; } |
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 |
Re: Class Template with Specialization code Giving Error
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 while it should call generalized Base class for Other cases where i did assigment Thanks Pallav |
Re: Class Template with Specialization code Giving Error
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 > > while it should call generalized Base class for Other cases where i > did assigment > > Thanks > Pallav I am also catching object by reference of derived class ........ |
Re: Class Template with Specialization code Giving Error
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 |
Re: Class Template with Specialization code Giving Error
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 |
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 |
Re: Class Template with Specialization code Giving Error
On Feb 21, 4:50 pm, Reetesh Mukul <reetesh.mu...@gmail.com> wrote:
> 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 ----------------------------------------------------------------------- Thanks I got while D<char> .........the Func() get Over-Ridding and thats Creating Problem Any Solution how to handle it in derived #include<iostream.h> 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 D1:B<char> { public : int func() {B<char>::func();} }; template<typename T> class D:B<T> { public : int func() { basefield = 12; return basefield; } }; void call(D<int> & obj_int){ cout<<"called function :: call(B<int> & obj_int) :: "<<obj_int.func()<<endl;} void call(D1<char> & obj_char){ cout<<"called function :: call(B<char> & obj_char):: "<<obj_char.func()<<endl;} int main() { D1<char> obj_char; D<int> obj_int; call(obj_char); call(obj_int); return 0; } |
| All times are GMT. The time now is 09:45 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.