erreur: la Classe n'a pas été déclaré en dépit de l'en-tête de l'inclusion, et le code de la compilation d'amende ailleurs

J'ai donc une classe incluse dans une autre classe qui maintient jetant une erreur de compilation de la forme "erreur:" ProblemClass " n'a pas été déclaré. Les fichiers sont mis en place comme ceci:

#ifndef PROBLEMCLASS_H
#define PROBLEMCLASS_H

#include <iostream>
#include <cmath>

class ProblemClass
{
  public:

    virtual void Init() = 0;
};

#endif

et la classe où l'erreur se produit ressemble à ceci:

#ifndef ACLASS_H
#define ACLASS_H

#include "problemclass.h"

class AClass : public Base
{
  public:

    void DoSomething(ProblemClass* problem);

};

#endif

L'erreur de compilation se produit à vide Dosomething();

Je suis conscient que le code n'est pas suffisant pour résoudre le problème. J'ai été incapable de créer un exemple minimal qui peut le reproduire. Donc ma question est beaucoup plus général, ce genre de choses pourrait en être la cause? Est-il quelque chose en particulier que je devrais regarder pour, ou de certains de questions que je devrais suivre pour le retrouver?

Ce code compile bien dans à peu près la même version du projet.

Aider de quelque sorte que ce serait grandement apprécié, peu importe la façon vague. J'utilise codeblocks 10.05 avec mingw4.4.1 en win 7 64 bits.

  • Vérifiez votre orthographe, de 9 cas sur 10, ces erreurs proviennent parce que vous orthographié l'un des identificateurs de mal.
  • J'ai été plus qu'avec un peigne à dents fines, et avait un ami regarde plus trop, donc je pense que l'orthographe est peu être le problème. Ainsi que le fait qu'il compile bien dans une version légèrement différente de ce projet où les deux classes existent et ont la même relation.
  • semble ok pour moi. Avez-vous mis en place un corps de DoSomething?
  • Pouvez-vous donner le code complet, en particulier la différence entre le cassé et le "presque identique de la version"?
  • Le corps de dosomething a été mis en œuvre yep. Fonctionnelle complète de code serait assez grande. Est-il une manière particulière, je devrais le poster d'autres que dans des balises de code?
  • Est-il possible que certains autres macro définit PROBLEMCLASS_H dans le code qui provoque l'erreur?
  • Le programme compile après j'ai déménagé des comprend de base et en Classe. Je suis toujours pas sûr de ce qui s'est passé, mais merci à tous pour leur temps.
  • Ne problemclass.h inclure aclass.h (directement ou indirectement)? Que serait la cause de ce problème, et peut être résolu par le remplacement de l'un ou des deux #includes avec la déclaration de la classe(es).
  • "Le programme compile après j'ai déménagé des comprend de base et en Classe" - Ça comme vous avez eu une dépendance cyclique. De toute façon on le comprend de ProblemClass inclus AClass et quand AClass comprend ProblemClass le compilateur ignore qui comprennent la déclaration pour éviter une récursion infinie.

InformationsquelleAutor gj5 | 2011-07-02