2 votes

variable non déclarée dans le champ d'application en utilisant l'héritage de modèle

OMStatic.h
template<class Concept> class OMStaticArray :
            public OMAbstructContainer<Concept> {
protected:
    Concept *theLink;
    int count;

    void* AllocateMemory(int size);
    bool  ReleaseMemory(void* pMemory);
    //...
};

OMCollec.h

template<class Concept> class OMCollection :
    public OMStaticArray<Concept>{
public:

void add(Concept p) {
    //...

> if (this->count >= size)

    //...
}

Dans le code ci-dessus, la classe OMCollection est héritée de OMStaticArray, je comprends que nous pouvons accéder directement aux variables protégées, mais je reçois une erreur "count not declared in scope". Si j'utilise ce->count, l'erreur n'est pas affichée. Pourquoi est-ce que je rencontre cette erreur, cela compilait dans VxWorks 5.5, et maintenant j'ai migré vers Vxworks6.8, je rencontre cette erreur si je n'utilise pas "prefix" avant ? quelle est la raison derrière cela ? Merci de m'éclairer.

Merci de votre attention !

3voto

Oli Charlesworth Points 148744

La meilleure façon de l'expliquer est de consulter la FAQ C++ : http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19 .

Pour paraphraser :

A l'intérieur OMCollection<Concept>::add() , le nom count d dépend pas du paramètre du modèle Concept Ainsi count i nom non dépendant . D'autre part, OMStaticArray<Concept> est dépend du paramètre du modèle Concept donc OMStaticArray<Concept> est appelé nom de la personne dépendante .

Voici la règle : le compilateur ne cherche pas dans les classes de base dépendantes dépendantes (comme OMStaticArray<Concept> ) lors de la recherche de noms non dépendants (comme count ).

Pour ce qui est de la raison pour laquelle cela s'est compilé dans un ancien compilateur, la raison est probablement que l'ancien compilateur n'était pas entièrement conforme à la norme C++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X