4 Stimmen

"Erwarteter Konstruktor, Destruktor oder Typumwandlung vor dem '<'-Token"

Ich stoße auf einen Syntax-/Parsing-Fehler, aber ich kann ihn nicht finden.

DataReader.h:11: Fehler: erwarteter Konstruktor, Destruktor oder Typumwandlung vor '<'-Token

Hier ist DataReader.h:

#include <fstream>
#include <iostream>
#include <vector>

#ifndef DATA_H
#define DATA_H
#include "Data.h"
#endif

vector<Data*> DataReader();   // This is line 11, where the error is..

Und dies ist die .cpp-Datei:

#include "DataReader.h"

using namespace std;

vector<Data*> DataReader()
{
 .....
}

Ich habe den Inhalt von DataReader() übersprungen, weil ich denke, dass er irrelevant ist, aber ich kann ihn bei Bedarf posten.

Vielen Dank für alle Anregungen und Vorschläge.

6voto

user200783 Punkte 12949

In Ihrer Header-Datei müssen Sie explizit std::vector und nicht nur vector .

Außerdem vermute ich, dass "Data.h" Anweisungen in der Form enthält:

#ifndef DATA_H
#define DATA_H
...
#endif

Das ist in Ordnung, aber Sie sollten diese Include-Guards nicht über #include "Data.h" auch, nur innerhalb der Datei selbst.

0 Stimmen

D.h. haben diese #ifndef ... #define .... am Anfang von Data.h selbst, und #endif am Ende dieser Datei. (So müssen alle möglichen Dateien, die auf diesen Header verweisen, diese wenigen Zeilen nicht schreiben). Dies ist nur ein Style-Hinweis, der jedoch nichts mit dem Kompilierungsfehler zu tun hat.

3 Stimmen

Es ist von entscheidender Bedeutung, dass Sie nicht die #define Zeile vor der #include wenn die eingeschlossene Datei #ifndef Schutzvorrichtungen auf demselben Makro basieren wie die äußere #ifndef guards, sonst wird der Inhalt der Header-Datei nie aufgenommen.

4voto

CB Bailey Punkte 693084

In Ihrer Header-Datei müssen Sie Folgendes verwenden std::vector und nicht einfach vector in der Deklaration der Funktion DataReader .

Der Standard umfasst <vector> verursacht die vector Klassenvorlage, die in der std Namespace und die Deklaration in Ihrer Header-Datei erfolgt vor jeder using namespace std; o using std::vector; .

4voto

SteveL Punkte 1781

Ich denke, in der Kopfzeile müssen Sie wahrscheinlich schreiben std::vector<Data*> DataReader(); als die using namespace std; nicht in den Geltungsbereich fällt.

1voto

Verwenden Sie std:vector und nicht vector vor Datareader.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X