2016-03-21 17 views
0

Ich habe seit einiger Zeit in Syntaxfehler C2061 untersucht, und ich habe verstanden, dass es oft durch zirkuläre Abhängigkeiten von Header-Dateien verursacht wird. Ich glaube jedoch, dass ich das in meinen Dateien gelöst haben sollte, aber ich habe weiterhin das Problem.C++ Benutzerdefinierte Header-Datei - Syntax Fehler C2061: Bezeichner

Arc.h

#pragma once 

#include <string> 

using namespace std; 

class Node; 

class Arc 
{ 
public: 
    Arc(Node &p_destination, const string &p_mode); 
    ~Arc(); 

private: 
    string m_mode; 
    Node* m_destination; 
}; 

Node.h

#pragma once 
#include <string> 
#include <vector> 

using namespace std; 

class Arc; 

class Node 
{ 
public: 
    Node(const string &p_name, const int &p_identifier, const float &p_latitude, const float &p_longitude); 
    ~Node(); 

    void set_arcs(Arc* p_arc) { m_arcs.push_back(p_arc); } //Line that causes the error 

private: 
    std::vector<Arc*> m_arcs; 
    //Other Private Variables removed 

}; 

Die Header-Dateien werden beide in den entsprechenden CPP-Dateien enthalten. Jede Hilfe in dieser Angelegenheit wird sehr geschätzt!

Edit: Vollständige Fehlermeldung unter

"Syntax Error: identifier 'Arc'" 
+0

Wie kann man 'Arc' ein Mitglied vom Typ' Node' haben und dann in 'Node' ein Mitglied vom Typ' Arc' haben? – EdChum

+1

([* Warum wird "Verwenden von Namespace std" in C++ als schlechte Methode betrachtet? *] (Http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-in-c-considered-bad- Übung)) – Biffen

+2

@LoadData Können Sie nicht die Implementierung von 'Node :: set_arcs' in die' .cpp' Datei einfügen? – Biffen

Antwort

0

Das Problem ist, dass der Name "Arc" bereits von einer Methode im globalen Namespace verwendet wird. Benennen Sie Ihre Klasse entweder in einen nicht verwendeten Namen um oder platzieren Sie sie in einem Namespace, der nicht der globale Namespace ist.

-4

Sie haben einen kreisförmigen dependecy in Dateien. Der Bogen hängt vom Knoten ab und der Knoten hängt von Arx ab. Dies kann nicht funktionieren, da Sie Arc in Node und Node in Arc einschließen müssen. Forward-Deklaration hilft hier ein wenig, aber Sie verwenden eine Verwendung in der Header-Datei. Sie sollten das nicht tun, denn dann sind Ihr Knoten und Ihr Bogen innerhalb von std. Hier finden Sie weitere Informationen. "using namespace" in c++ headers

+2

Wie geschrieben, hängt keine der Klassendefinitionen vom anderen ab. – molbdnilo

Verwandte Themen