2010-08-01 3 views
0

Je reçois cette erreur "Nom de classe attendu avant", "jeton" et "Nom de classe attendu avant" {"jeton" dans MainController.h Je pense que je suis en incluant des fichiers comme nécessaire, en faisant aussi #ifndef HEADER_H #define HEADER_H, etc. dans tous les en-têtes, je n'ai eu aucune erreur jusqu'à ce que j'aie écrit la classe de MainController. Je ne sais pas pourquoi cette erreur apparaît. Qu'est-ce que j'oublie ici?multi-héritage en C++, différents fichiers: "Nom de classe attendu avant", "token"

Je N4GestureRecognizer.h:

class N4GestureRecognizer; 
class N4GestureRecognizerDataSource{ /*it uses N4GestureRecognizer*/ }; 
class N4GestureRecognizerDelegate{ }; 
class N4GestureRecognizer { 
...  
}; 

N4FingerTipGestureRecognizer.h

#include "N4GestureRecognizer.h" 
class N4FingerTipGestureRecognizer; 

class N4FingerTipGestureRecognizerDelegate : public N4GestureRecognizerDelegate{ 
public: 
    virtual void fingerTipGestureRecognizerCallback(N4FingerTipGestureRecognizer *recognizer) = 0; 
}; 
class N4FingerTipGestureRecognizer : public N4GestureRecognizer{ 
...  
}; 

Et MainController.h

#include "N4GestureRecognizer.h" 
#include "N4FingerTipGestureRecognizer.h" 

using namespace cv; 

//******Error is in the next line****** 
class MainController : public N4GestureRecognizerDatasource, public N4FingerTipGestureRecognizeDelegate{ 
protected: 
    Mat image; 
public: 
    /*virtual*/ Mat gestureRecognizerNeedsImageFrame(N4GestureRecognizer *recognizer); 
    /*virtual*/ void fingerTipGestureRecognizerCallback(N4FingerTipGestureRecognizer *recognizer); 

}; 
+2

Vous n'écrivez pas littéralement «#ifndef HEADER_H», n'est-ce pas? Le nom de la macro doit être différent pour chaque en-tête. – Thomas

+0

N'écrivez pas 'using namespace' dans les fichiers d'en-tête; et s'il vous plaît essayez de poster du vrai code de travail: ni l'espace de noms «cv» ni le type «Mat» ne sont déclarés dans votre code et provoquent des erreurs de compilation supplémentaires qui ne sont pas liées au problème. – Philipp

+0

Pourquoi je ne devrais pas écrire "using namespace" dans les en-têtes? – nacho4d

Répondre

1

Il semble y avoir deux fautes de frappe dans votre code:

  1. Dans N4GestureRecognizer.h vous avez N4GestureRecognizerDataSource, mais vous essayez d'avoir MainController hériter de N4GestureRecognizerDatasource; Notez le cas différent du S dans DataSource.
  2. En N4FingerTipGestureRecognizer.h vous avez N4FingerTipGestureRecognizerDelegate, mais vous essayez d'avoir MainController hériter de N4FingerTipGestureRecognizeDelegate; Notez le r manquant avant Delegate.
+0

Une bonne raison de ne pas utiliser de noms très longs. –

+0

... et d'utiliser un éditeur/IDE avec auto-complétion. – Philipp

+0

Quel imbécile! moi. lol. Merci – nacho4d

1

En supposant que la source que vous avez collé ci-dessus est vraiment le texte source contient le problème est dans class N4GestureRecognizerDataSource par rapport public N4GestureRecognizerDatasource.

Questions connexes