2 votes

Déclaration anticipée à l'intérieur d'un espace de noms

J'ai rencontré un problème étrange en essayant de compiler mon code dans Visual Studio (2010); voici un exemple isolé (et simplifié) :

class A
{
public:
  enum {
    VALUE   = 0
  };
};

namespace ns
{

class A;

class B
{
public:
  B(int val = ::A::VALUE) // cette ligne
  {}
};

class A : public ::A
{
public:
};

}

Cela donne l'erreur suivante : erreur C2027 : utilisation du type 'ns::A' non défini. Est-ce un bug dans VS ou est-ce que je fais quelque chose de mal ?

Mise à jour : cela semble être un bug spécifique à Visual Studio. Voici une solution de contournement suggérée sur Microsoft Connect:

class B
{
public:
  typedef ::A A1;
  B(int val = A1::VALUE)
  {}
};

1voto

Andy Prowl Points 62121

Ceci est un bug dans VC10. Votre nom de classe ::A est entièrement qualifié, et la définition de A dans l'espace de noms global est visible par le compilateur. En outre, GCC 4.7.2 compile cela sans problèmes.

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