Benutzer-Erstellte Header Verursacht C2061: Syntaxfehler : Bezeichner 'classname'
So, ich habe irgendwie erwarten, dass dies am Ende als eine einfache Antwort, aber ich habe-hacking auf es für eine Weile jetzt, und kann nicht scheinen, um dieses Problem zu beheben. Also ich habe eine bestimmte Klasse Intersection
, dass, wenn in einer beliebigen anderen header gibt mir:
error C2061: syntax error : identifier 'Intersection'
Dies ist mein Schnittpunkt-header:
#ifndef INTERSECTION_H
#define INTERSECTION_H
#include "Coord.h"
#include "Road.h"
#include "TrafficLight.h"
class Intersection {
private:
int id;
Coord * midPoint;
Road * northRoad;
Road * eastRoad;
Road * westRoad;
Road * southRoad;
TrafficLight * trafficLight;
public:
Intersection(int, Coord *, Road *, Road *, Road *, Road *);
~Intersection();
void transitionTrafficLight();
int getId();
Road * getNorthRoad();
Road * getEastRoad();
Road * getWestRoad();
Road * getSouthRoad();
TrafficLight * getTrafficLight();
};
#endif
Nun, wenn ich Versuch, diese Klasse zu benutzen anderswo, bekomme ich die Fehlermeldung. Zum Beispiel:
#ifndef ROAD_H
#define ROAD_H
#include "Coord.h"
#include "Intersection.h"
#include <string>
class Road {
public:
enum LaneCount { TWO_LANE = 2, FOUR_LANE = 4 };
Road(std::string, Coord *, Coord *, LaneCount, Intersection *, Intersection *, int);
//shortened
Besonders am Road
Konstruktor (und alle anderen Klassen, die Referenz -Intersection
). Ich glaube nicht, dass es ein syntax-problem, wie Coord
ist eine weitere Klasse definiert, in der gleichen Weise, und der compiler (VS 2008) nicht beschweren. Es ist nur Intersection
insbesondere, dass mir diese Mühe. :/
Ich bin tagging es Hausaufgaben-es ist, was es ist, auch wenn dies nur ein Fehler kann ich nicht loswerden, eher als Teil des Problems.
Gedanken?
- Es sieht aus wie Sie brauchen, um vorwärts zu deklarieren
class Intersection;
im ROAD_H-Datei. - Interessant. Das scheint es erledigt zu haben. Können Sie erklären, warum das funktioniert zwar inklusive des gesamten headers nicht, und warum nur diese Klasse scheint ein problem zu haben? Tun Sie es in eine Antwort und ich werde Ihnen gern die Prüfung. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie der Fehler ist, dass Sie zwei header-Dateien, die kreisförmig darunter eine andere - Kreuzung.h und Straße.h. Tun dieser neigt dazu, führen zu seltsamen überraschungen in C++, weil, wie die include-guards arbeiten. Angenommen, ich habe zwei header-Dateien, die wie folgt Aussehen:
und
Nun, wenn ich versuche zu
#include "A.h"
, dann erweitert es sich zuWenn ich versuche, aus erweitern die
#include "B.h"
, bekomme ich diese:Zu diesem Zeitpunkt der Präprozessor wird wieder versuchen, sich auszudehnen
A.h
, die führt zu diesem:Nun, lasst uns sehen, was passiert, wenn wir beheben alle diese sonderbaren include-guards. Das erste mal, wir sehen Ein, es erweitert sich, wie ist der Fall, wenn wir uns erweitern, out B für die erste Zeit. Jedoch, wenn wir sehen, Ein zweites mal, es ist nicht erweitert werden. So, nachdem ich Kommentare und Präprozessor-Direktiven, erhalten wir diese resultierende code:
Beachten Sie, dass, wenn
MyOtherFunction
deklariert ist,A
noch nicht erklärt wurde, und so meldet der compiler einen Fehler.Um dies zu beheben, können Sie vorwärts-deklarieren
A
undB
in den header-Dateien, die Sie benötigen:und
Nun, gibt es keine zyklischen Abhängigkeiten. Solange Sie
#include
die entsprechenden header-Dateien in das .cpp-Dateien, Sie sollten in Ordnung sein.Hoffe, das hilft!