2010-08-13 5 views
0

Lorsque je compile les éléments suivantsproblème avec une spécialisation de modèle pour une classe dérivée

#include <iostream> 

#define XXX 1 
#define YYY 2 

class X 
{ 
public: 

    template< int FLD > 
    void func(); 
}; 

template<> void X::func<XXX>() 
{ 
    std::cout << "X::func< " << XXX << " >" << std::endl; 
} 

class Y : public X 
{ 
public: 
}; 

template<> void Y::func<YYY>() 
{ 
    std::cout << "Y::func< " << YYY << " >" << std::endl; 
} 

template<> void Y::func<XXX>() 
{ 
    std::cout << "Y::func< " << XXX << " >" << std::endl; 
} 

int main(int c, char *v[]) 
{ 
    X x; 

    Y y; 
} 

Je reçois

x.cpp:24: error: template-id 'func<2>' for 'void Y::func()' does not match any template declaration 
x.cpp:24: error: invalid function declaration 
x.cpp:29: error: template-id 'func<1>' for 'void Y::func()' does not match any template declaration 
x.cpp:29: error: invalid function declaration 

Je suis en train de se spécialiser dans un modèle d'une classe de base. Est-ce que n'importe qui peut expliquer comment c'est fait ou pourquoi je ne peux pas le faire.

Thx Marque.

Répondre

1

Vous ne pouvez pas le faire, comme vous ne pouvez pas faire ce qui suit soit et pour la pour la même raison, Y::func n'est pas déclaré dans Y:

class X { 
public: 
    void foo(); 
}; 
void X::foo() {} 
class Y : public X { 
}; 
void Y::foo() {} 
+0

Doh !!. Quel muppet je suis ... – ScaryAardvark

1

Il n'y a pas de méthode avec le nom func() déclarée dans la classe Y, donc compilateur ne peut pas trouver Y :: Déclaration de func()

Questions connexes