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;
};

节点.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。这是行不通的,因为您必须在 Node 中包含 Arc,并且在 Arc 中包含 Node。前向声明在这里有点帮助,但你在头文件中放置了一个 using 。你不应该这样做,因为你的 Node 和 Arc 在 std. 在这里寻找进一步的说明。 C++ 头文件中的“使用命名空间”

于 2016-03-21T10:34:37.007 回答