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

时间:2016-03-21 10:22:58

标签: c++ namespaces name-resolution

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

2 个答案:

答案 0 :(得分:0)

问题在于名称&#34; Arc&#34;已被全局命名空间中的方法使用。将您的类重命名为未使用的名称,或将其放在不是全局名称空间的名称空间中。

答案 1 :(得分:-4)

您的文件中存在循环依赖性。 Arc依赖于Node,Node依赖于Arx。这不起作用,因为您必须在节点中包含Arc,并在Arc中包含Node。 前向声明有点帮助,但你在头文件中放了一个使用。你不应该这样做,因为那时你的Node和Arc就在std里面。请在此处进一步说明。 "using namespace" in c++ headers