2016-03-21 19 views
0

私はしばらくの間、構文エラーC2061を探していましたが、これはヘッダーファイルの循環依存性によって引き起こされることがよくあることがわかりました。しかし、私は私のファイルでこれを解決しておくべきだと私はまだ問題を持っていると思う。C++カスタムヘッダーファイル - 構文エラーC2061:識別子

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 

}; 

ヘッダファイルは、両方の対応するCPPファイルに含まれています。この問題に関するいかなる助力も非常に高く評価されます!

編集:

"Syntax Error: identifier 'Arc'" 
+0

どのように 'Arc'に' Node'型のメンバがあり、 'Node'にメンバ型' Arc'があるのですか? – EdChum

+1

([* C++で "namespace std"を使用するのはなぜ悪い考えですか?*](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-練習)) – Biffen

+2

@LoadData 'Node :: set_arcs'の実装を' .cpp'ファイルに入れることはできませんか? – Biffen

答えて

0

問題は、名前「Arc」がグローバル名前空間内のメソッドによって既に使用されていることです。クラスの名前を未使用の名前に変更するか、グローバル名前空間ではない名前空間に配置します。

-4

以下の全エラーメッセージがあなたのファイルに円形dependecyを持っています。アークはノードに依存し、ノードはArxに依存する。これは、ノードにアークを含める必要があり、アークにノードを含める必要があるため、機能しません。 前方宣言はちょっと役立ちますが、ヘッダファイルの中にusingを入れます。ノードとアークが標準の内部にあるので、これを行うべきではありません。もっと明確にするためにここを見てください。 "using namespace" in c++ headers

+2

書かれているように、どちらのクラス定義もどちらにも依存しません。 – molbdnilo