2010-06-14 7 views
0

J'essaie d'utiliser l'héritage parmi les classes définies dans un modèle de classe (classes internes). Cependant, le compilateur (GCC) refuse de me donner accès aux membres publics de la classe de base.Héritage à l'intérieur d'un modèle - les membres publics deviennent invisibles?

code Exemple:

template <int D> 
struct Space { 
    struct Plane { 
     Plane(Space& b); 
     virtual int& at(int y, int z) = 0; 
     Space& space;    /* <= this member is public */ 
    }; 

    struct PlaneX: public Plane { 
     /* using Plane::space; */ 
     PlaneX(Space& b, int x); 
     int& at(int y, int z); 
     const int cx; 
    }; 

    int& at(int x, int y, int z); 
}; 

template <int D> 
int& Space<D>::PlaneX::at(int y, int z) { 
    return space.at(cx, y, z); /* <= but it fails here */ 
}; 

Space<4> sp4; 

Le compilateur dit:

 
file.cpp: In member function ‘int& Space::PlaneX::at(int, int)’: 
file.cpp:21: error: ‘space’ was not declared in this scope 

Si using Plane::space; est ajouté à la définition de la classe Planex, ou si le membre de la classe de base est accessible via le pointeur this, ou Si la classe Space est changée en classe non-template, alors le compilateur lui convient.

Je ne sais pas s'il s'agit d'une restriction obscure de C++ ou d'un bogue dans GCC (versions 4.4.1 et 4.4.3 de GCC testées). est-ce que quelqu'un a une idée?

+1

en double de [problème avec l'héritage du modèle] (http://stackoverflow.com/questions/2982660/problem-with -template-inheritance) (la version courte est: ce n'est pas un bug, c'est juste comment fonctionne la recherche de noms en C++) –

Répondre

Questions connexes