Appel de constructeur de base de modèle dans l'erreur de liste d'initialisation de membre
J'ai une classe de base qui ressemble à celui-ci.
template<typename T>
class Base
{
public:
Base(int someValue);
virtual T someFunc() =0;
};
template<typename T>
Base<T>::Base(int someValue)
{}
Et puis le suivant.
#include "base.hpp"
class Foo
: public Base<Foo>
{
public:
Foo(int someValue);
virtual Foo someFunc();
};
Foo::Foo(int someValue)
: Base(someValue)
{}
J'obtiens l'erreur suivante à partir de gcc 4.2.1.
error: class ‘Foo’ does not have any field named ‘Base’
Je dois mentionner que cette compile très bien sur mon Fedora boîte qui est en cours d'exécution gcc 4.6.2. Cette erreur se produit lors de la compilation sur mes os x Lion machine.
Merci d'avance pour l'aide.
MODIFIER
Problème semble que je ne suis pas en indiquant le type de modèle dans la classe Foo lors de l'appel du constructeur. Les correctifs suivants l'erreur dans os x.
: Base<Foo>(someValue, parent)
MODIFIER
Oui, cela ressemble à un bug. Ce que j'ai mentionné avant corrige l'erreur sous os x et le code compile bien dans fedora avec ce correctif. Vais aller voir si il y a une mise à jour de gcc sous os x.
source d'informationauteur user174084
Vous devez vous connecter pour publier un commentaire.
Première:
Et
Base
doit être valide injecté-classe-nom de pour la base (qui est, vous pouvez l'utiliser à la place deBase<T>
):Je n'ai rien trouvé pour indiquer que cela ne s'applique pas dans le ctor-initialiseurdonc je dirais que c'est un bug du compilateur.
Mon stripped-down testcase échoue dans GCC 4.1.2 et GCC 4.3.4 mais réussit à GCC 4.5.1 (C++11)de mode. Il semble être résolu par GCC bug 189; dans la GCC 4.5-release notes:
Mon stripped-down testcase avec Qt abstraite: