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

前端之家收集整理的这篇文章主要介绍了C – 嵌套包含 – 避免’包括嵌套太深错误’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我想在我的C代码中具有以下连接,那么最好的方法是声明我的头文件,这样我就不会得到“包含嵌套太深的错误”?

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

Node.h

#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

#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应该像这样:

#ifndef EDGE_H
#define EDGE_H

class Node;    // forward declaration

Node functionB();

#endif

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

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

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

猜你在找的C&C++相关文章