【问题标题】:C++ Custom Header File - Syntax Error C2061: identifierC++ 自定义头文件 - 语法错误 C2061:标识符
【发布时间】:2016-07-07 19:21:44
【问题描述】:

我已经研究了一段时间的语法错误 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;
};

节点.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'"

【问题讨论】:

  • @LoadData 不能把Node::set_arcs的实现放到.cpp文件里吗?
  • @EdChum 虽然它可能是糟糕设计的标志,但我看不出这有什么问题。一个是指针类型,另一个在向量内,所以没有无限递归。
  • 请发布整个错误信息。
  • 这段代码是否被复制和粘贴(不是从内存中重新键入),这是第一个错误消息吗?

标签: c++ namespaces token-name-resolution


【解决方案1】:

问题是名称“Arc”已被全局命名空间中的方法使用。将您的类重命名为未使用的名称,或者将其放置在不是全局命名空间的命名空间中。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 正如所写,两个类定义都不会以任何方式依赖于另一个。
    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多