C – 嵌套包含 – 避免’包括嵌套太深错误’

如果我想在我的C代码中具有以下连接,那么最好的方法是声明我的头文件,这样我就不会得到“包含嵌套太深的错误”?

在我的边缘类上,我有一些需要返回一个Node对象的函数.对于Edge类来说,我有一些需要返回Node对象的函数.但编译器不允许我有这个嵌套循环的东西.@H_502_3@

Node.h@H_502_3@

#ifndef _NODE_h__
#define __NODE_h__

#include "Edge.h" 
public:
    Node();
    ~Node();
    void setName(string);
    string getName();
    void addEdge(Edge*);
    vector<Edge* > getEdges() { return _edges; };
};
#endif

Edge.h@H_502_3@

#ifndef _EDGE_h__
#define __EDGE_h__

#include "Node.h"
class Edge 
{
public:

    Edge();
    Edge(bool);
    ~Edge();
    bool hasBeenSeen() { return _seen; };
    void reset() { _seen = false; };  // resets seen param to false
    Node* getSource() { return _source; };
    Node* getTarget() { return _target; };
    void setSource(Node* source) { _source = source; };
    void setTarget(Node* target) { _target = target; };
};
#endif

解决方法

正如其他人所建议的那样,使用前卫.但也尝试宣传有关课程.您可能还必须在至少一个类中使用指针(而不是值),但是没有看到代码,我们无法告诉.

所以edge.h应该像这样:@H_502_3@

#ifndef EDGE_H
#define EDGE_H

class Node;    // forward declaration

Node functionB();

#endif

请注意,您必须在单独的C文件中定义您的函数,然后#include“node.h”.@H_502_3@

如果这一切似乎都很复杂,那么你应该尝试简化你的设计.节点和边缘可能不需要彼此了解 – 单向依赖应该足够了.@H_502_3@

最后,C中保留包含双下划线的名称 – 您不能在自己的代码中创建此类名称.@H_502_3@

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...