C++ 自定义头文件 - 语法错误 C2061:标识符

C++ Custom Header File - Syntax Error C2061: identifier

我研究语法错误 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'"

您的文件存在循环依赖。 Arc 依赖于 Node,Node 依赖于 Arx。这是行不通的,因为您必须在 Node 中包含 Arc,并且在 Arc 中包含 Node。 前向声明在这里有点帮助,但您在头文件中放置了一个 using 。你不应该这样做,因为那样你的 Node 和 Arc 就在 std 中。在这里查看进一步的说明。 "using namespace" in c++ headers

问题是名称 "Arc" 已被全局命名空间中的方法使用。要么将您的 class 重命名为未使用的名称,要么将其放置在非全局名称空间的名称空间中。