Aide en cas d’erreur: ISO C ++ interdit la déclaration de “vecteur” sans type

Comme le titre l’indique, je ne sais pas trop pourquoi cette erreur se produit. J’ai mis au point un fichier test.cpp similaire à cette structure, et tout fonctionne correctement. En outre, outre le problème des vecteurs, il existe un autre problème concernant le terme “protégé”, qui n’est même pas dans le code. Je pense que “protégé” est une macro, donc rien ne dit ce qu’il ya. Je suis nouveau à QT, alors je suis probablement “en train de mal faire”. C’est certainement ce que suggère le compilateur.

In file included from DrvCrystalfontz.cpp:8: LCDText.h:28: error: ISO C++ forbids declaration of 'vector' with no type LCDText.h:28: error: expected ';' before '<' token LCDText.h:30: error: ISO C++ forbids declaration of 'vector' with no type LCDText.h:30: error: expected ',' or '...' before '<' token LCDText.h:46: error: expected ':' before 'protected' LCDText.h: In constructor 'LCDText::LCDText(int, int, int, int, int, int, int, QObject*)': LCDText.h:33: error: expected '{' at end of input scons: *** [DrvCrystalfontz.o] Error 1 scons: building terminated because of errors. 

Voici le code. J’ai numéroté les lignes notées dans l’erreur.

 #ifndef __LCD_TEXT__ #define __LCD_TEXT__ #include  #include  #include "LCDBase.h" #include "WidgetText.h" #include "WidgetBar.h" #include "WidgetHistogram.h" #include "WidgetIcon.h" #include "WidgetBignums.h" #include "WidgetGif.h" class LCDText: public LCDBase, public virtual QObject { Q_OBJECT protected: char *LayoutFB; char *DisplayFB; int GOTO_COST; int CHARS; int CHAR0; int LROWS; int LCOLS; int DROWS; int DCOLS; vector<vector > chars; // Line 28 void (*TextRealWrite) (const int row, const int col, const char *data, const int len); void (*TextRealDefchar) (const int ascii, const vector masortingx); // Line 30 public: LCDText(int rows, int cols, int xres, int yres, int _goto, int chars, int char0, QObject *parent) : LCDBase(xres, yres), QObject(parent); // Line 33 ~LCDText(); void TextInit(int rows, int cols); void TextBlit(int row, int col, int height, int width); void TextClear(); void TextClearChars(); void TextGreet(); void TextDraw(WidgetText widget); void TextBarDraw(WidgetBar widget); void TextHistogramDraw(WidgetHistogram widget); void TextIconDraw(WidgetIcon widget); void TextBignumsDraw(WidgetBignums widget); void TextGifDraw(WidgetGif widget); public signals: // Line 46 void SpecialCharChanged(int ch); public slots: void TextSpecialCharChanged(int ch); }; #endif 

Le vecteur réside dans l’espace de noms std. Vous devez effectuer l’une des opérations suivantes:

Ajoutez le type avec le namespace:

 std::vector > chars; 

Indiquez au compilateur que vous utilisez un vecteur à partir de l’espace de noms std

 using std::vector; vector > chars; 

Ou, dites au compilateur que vous utilisez l’espace de noms std, ce qui apportera tout (non recommandé, voir les commentaires)

 using namespace std; 

chaque symbole déclaré dans la bibliothèque standard C ++ fait partie de l’espace de noms std. Pour utiliser ces déclarations, vous devez le référencer par son nom complet. à savoir std ::.
Comme MichaelM a répondu, vous devriez utiliser std :: vector au lieu de vector. Vous pouvez cependant utiliser les “instructions d’utilisation” suivantes:
1. en using std::vector;
2. using namespace std; // using namespace ...; is mostly discouraged as it causes a mass-import of symbols into the global namespace using namespace std; // using namespace ...; is mostly discouraged as it causes a mass-import of symbols into the global namespace

Dans tous les cas, vous devriez éviter d’utiliser la déclaration dans les fichiers d’en-tête car elle pollue l’espace de noms global de chaque utilisateur de votre en-tête.

bonne chance