0

我使用以下标题Node.h

/*
    INCLUDE PROTECTION
*/
#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

/*
    Include
*/
#include <vector>
#include <unordered_map>
//#include "NodeConnection.h"
#include "Tile.h"
#include "Network.h"

/*
    Declarations
*/
class Network;
class NodeConnection;

class Node {
    private:

        Tile* tile;

        std :: vector <NodeConnection*> connections;
        std :: unordered_map <Node*, NodeConnection*> connectionmap;

    public:

        /* Enumeration */

        enum NAVIGATION {
            RIGHT = 0, 
            UP = 1, 
            LEFT = 2, 
            DOWN = 3
        };

        Node (Tile* _tile);

        void FindNeighbours(Board* board, Network* network);

        void SetNodeConnection(Node* node, NodeConnection* nodeconnection);

};

struct TileNavigation {
    Tile* tile;
    enum Node :: NAVIGATION navigation;
};

#endif

以及以下内容的标题NodeConnection.h

/*
    INCLUDE PROTECTION
*/
#ifndef NODECONNECTION_H_INCLUDED
#define NODECONNECTION_H_INCLUDED

/*
    Include
*/
#include <string>
#include "Node.h"

/*
    Declarations
*/
class Node;
struct Nodes;


enum ConnectionType {
    WALLCONN, PATHCONN, UNKNOWN
};

class NodeConnection {
    private:

        enum ConnectionType contype;

        struct Nodes;

    public:

        //NodeConnection ();
        NodeConnection (Node* a, Node* b,  NAVIGATION initial_nav);
};

struct Nodes {

    Node* left;
    Node* right;
    std :: string steps;

};

#endif

我试过Node :: NAVIGATIONand NAVIGATION,但它一直告诉我

"   'NAVIGATION' has not been declared   "

有谁知道我做错了什么?提前感谢您的指点。

4

1 回答 1

4

你有circuit-include问题。Node.hNodeConnection.h相互包容。

修理:

转发声明,从 Node.hNodeconnectionNode.h删除以解决问题。#include "NodeConnection.h"circuit-including

//#include "NodeConnection.h"  // 
class Network;
class NetworkConnection; // forward declare NetworkConnection
class Node {
//..
};

包含NodeConnection.h在 Node.cpp 文件中。

#include "NodeConnection.h"

Node::NAVIGATION在 NodeConnection.h 中使用

class NodeConnection {
private:

    //enum ConnectionType contype;  don't need to use enum keyword again.
    ConnectionType contype;

public:

    //NodeConnection ();
    NodeConnection (Node* a, Node* b,  Node::NAVIGATION initial_nav);

};

于 2013-10-11T22:39:30.697 回答