Xcode C++&引用;使用未声明的标识符“;另一个类出错 我在这里做了一些关于XCODEL和C++中未声明的标识符错误的阅读。它通常看起来是来自代码中某个地方的一些小键入,但我无法理解为什么我会得到这个错误(也请注意我是C++初学者,所以我可能会犯一些愚蠢的错误)。p>

Xcode C++&引用;使用未声明的标识符“;另一个类出错 我在这里做了一些关于XCODEL和C++中未声明的标识符错误的阅读。它通常看起来是来自代码中某个地方的一些小键入,但我无法理解为什么我会得到这个错误(也请注意我是C++初学者,所以我可能会犯一些愚蠢的错误)。p>,c++,xcode,boost,C++,Xcode,Boost,我正在为人工神经网络编写我自己的库,当我试图编译'Connection'类时,我在Connection.h文件中的每一行都会遇到一个“使用未声明的标识符'Node'”错误,其中包含Node类。节点类和连接类位于同一名称空间中,两个cpp文件都是针对头文件中声明的所有函数完全实现的。以下是两个类的头文件: Connection.h(我遇到问题的地方): #包括 #包括 #包括 #包括“Node.h” 名称空间ANN{ 类连接{ 公众: 连接(); 连接(boost::shared_ptr inNo

我正在为人工神经网络编写我自己的库,当我试图编译'Connection'类时,我在Connection.h文件中的每一行都会遇到一个“使用未声明的标识符'Node'”错误,其中包含Node类。节点类和连接类位于同一名称空间中,两个cpp文件都是针对头文件中声明的所有函数完全实现的。以下是两个类的头文件:

Connection.h(我遇到问题的地方):

#包括
#包括
#包括
#包括“Node.h”
名称空间ANN{
类连接{
公众:
连接();
连接(boost::shared_ptr inNode、boost::shared_ptr outNode、float weight、int connID);
~Connection();
虚拟boost::shared_ptr getInputNode();
虚拟boost::shared_ptr getOutputNode();
虚拟void setInputNode(boost::shared_ptr inNode);
虚拟void setOutputNode(boost::shared_ptr outNode);
虚拟浮点getConnectionWeight();
虚拟空隙设置连接重量(浮动重量);
虚拟int getConnectionID();
虚拟void setConnectionID(int-ID);
受保护的:
std::元组连接;
int connectionID;
私人:
};
}
此外,在声明受保护连接变量的行中,我还遇到了一些其他错误。我得到了一个“解析问题:需要一个类型”和一个“解析问题:在声明说明符之后需要一个成员名或“;”

这是节点。h:

#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
#include "ActivationFunction.h"
#include "Connection.h"



namespace ANN{

    class Node{



    public:

        enum{
            INPUT = 0,
            HIDDEN = 1,
            OUTPUT = 2
        }kANNnodeTypes;

        Node(int num, int nodeType);
        ~Node();

        virtual void addOutputConnection(boost::shared_ptr<Connection> outputConnection);

        virtual void activateNode(ActivationFunction* activationObject);
        virtual void addInputSignalFromIncomingNode(float inputSignal, float connectionWeight);
        virtual int getNodeType();
        virtual int getNodeNum();
        virtual void loadInputAsSensorInput(float input);
        virtual bool isActivated();
        virtual bool isAllInputsReceived();
        virtual float getLatestOutput();
        virtual void resetNode();
        virtual void sendOutputToOutputNodes();
        virtual void setNumberOfInputConnections(int nC);
        virtual int getNumberOfInputConnections();

    protected:



        int nodeNum;
        int nodeType;
        int nInputConnections;
        int inputConnectionCount;
        float latestOutput;
        bool activated;
        float inputSignal;
        bool allInputsReceived;
        std::vector<float> outputWeights;
        std::vector<boost::shared_ptr<Node>> outputConnections;






    private:


    };
}
#包括
#包括
#包括
#包括“ActivationFunction.h”
#包括“Connection.h”
名称空间ANN{
类节点{
公众:
枚举{
输入=0,
隐藏=1,
输出=2
}Kannodetype;
节点(int-num,int-nodeType);
~Node();
虚拟void addOutputConnection(boost::shared_ptr outputConnection);
虚空激活节点(激活函数*激活对象);
虚拟void addInputSignalFromIncomingNode(浮点输入信号、浮点连接权重);
虚拟int getNodeType();
虚拟int getNodeNum();
虚拟无效载荷输入传感器输入(浮点输入);
虚拟布尔已激活();
虚拟布尔值isAllInputsReceived();
虚拟浮点getLatestOutput();
虚拟空重置节点();
虚拟void sendOutputOutputNodes();
虚拟void setNumberOfInputConnections(int-nC);
虚拟int getNumberOfInputConnections();
受保护的:
int nodeNum;
int节点类型;
内部连接;
int输入连接计数;
浮动延迟输出;
bool激活;
浮点输入信号;
收到所有输入;
std::向量输出权重;
std::向量输出连接;
私人:
};
}

Node.h包括Connection.h。连接.h包括节点.h。那是不可能的。无论如何,它们都不需要包含,因为转发声明就足够了。好的,很高兴知道。C++为什么不能发生这种情况?另外,转发声明的确切含义是什么?如果首先是Connection.h,则尚未声明它所依赖的节点类。同样的事情,反之亦然。谢谢你的提示,克里斯!我现在可以用了。如果你想写一个答案,我可以给你打上正确的标记。肯定还有很多其他问题。其中之一必须有一个特别好的答案。
#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
#include "ActivationFunction.h"
#include "Connection.h"



namespace ANN{

    class Node{



    public:

        enum{
            INPUT = 0,
            HIDDEN = 1,
            OUTPUT = 2
        }kANNnodeTypes;

        Node(int num, int nodeType);
        ~Node();

        virtual void addOutputConnection(boost::shared_ptr<Connection> outputConnection);

        virtual void activateNode(ActivationFunction* activationObject);
        virtual void addInputSignalFromIncomingNode(float inputSignal, float connectionWeight);
        virtual int getNodeType();
        virtual int getNodeNum();
        virtual void loadInputAsSensorInput(float input);
        virtual bool isActivated();
        virtual bool isAllInputsReceived();
        virtual float getLatestOutput();
        virtual void resetNode();
        virtual void sendOutputToOutputNodes();
        virtual void setNumberOfInputConnections(int nC);
        virtual int getNumberOfInputConnections();

    protected:



        int nodeNum;
        int nodeType;
        int nInputConnections;
        int inputConnectionCount;
        float latestOutput;
        bool activated;
        float inputSignal;
        bool allInputsReceived;
        std::vector<float> outputWeights;
        std::vector<boost::shared_ptr<Node>> outputConnections;






    private:


    };
}