PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > Class Template with Specialization code Giving Error
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Class Template with Specialization code Giving Error

Réponse
 
LinkBack Outils de la discussion
Vieux 21/02/2008, 10h55   #1
Pallav singh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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;

}

  Réponse avec citation
Vieux 21/02/2008, 11h26   #2
Reetesh Mukul
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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
  Réponse avec citation
Vieux 21/02/2008, 11h36   #3
Pallav singh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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
  Réponse avec citation
Vieux 21/02/2008, 11h39   #4
Pallav singh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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 ........
  Réponse avec citation
Vieux 21/02/2008, 11h41   #5
Reetesh Mukul
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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
  Réponse avec citation
Vieux 21/02/2008, 11h47   #6
Pallav singh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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
  Réponse avec citation
Vieux 21/02/2008, 11h50   #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
Vieux 21/02/2008, 12h01   #8
Pallav singh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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;

}

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 11h54.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,32356 seconds with 16 queries