0

シンタックス エラー C2061 についてしばらく調べていたところ、ヘッダー ファイルの循環依存関係が原因であることが多いことがわかりました。ただし、ファイルでこれを解決する必要があったと思いますが、引き続き問題が発生します。

アーチ

#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'"
4

2 に答える 2

0

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

于 2016-03-21T13:12:46.290 に答える
-4

ファイルに循環依存関係があります。Arc は Node に依存し、Node は Arx に依存します。ノードにアークを含め、アークにノードも含める必要があるため、これは機能しません。ここでは前方宣言が少し役立ちますが、ヘッダー ファイル内に using を配置します。Node と Arc は std 内にあるため、これを行うべきではありません。詳細については、こちらをご覧ください。 C++ ヘッダーの「名前空間の使用」

于 2016-03-21T10:34:37.007 に答える