C++ &引用;节点";不命名类型

C++ &引用;节点";不命名类型,c++,C++,我有三个类Node、Pattern和Motor,它们都在同一个目录中 在Pattern类中,我定义了一个Node类型的函数,但是程序没有编译,请您帮忙好吗 以下是所有文件: 节点h: #ifndef Node_h #define Node_h #include "Arduino.h" #include "Motor.h" #include "Pattern.h" #include "QueueArray.h" class Node { public: Node(); ~Node(); int

我有三个类Node、Pattern和Motor,它们都在同一个目录中 在Pattern类中,我定义了一个Node类型的函数,但是程序没有编译,请您帮忙好吗

以下是所有文件:

节点h:

#ifndef Node_h
#define Node_h

#include "Arduino.h"
#include "Motor.h"
#include "Pattern.h"
#include "QueueArray.h"

class Node
{
public:
Node();
~Node();
int amplitude;
int duration;
void setPatternNode(int amplitude,int duration);

};

#endif
Node.cpp:

#include "Arduino.h"
#include "Node.h"
#include "Motor.h"
#include "Pattern.h"
#include "QueueArray.h"


Node::Node(){}
Node::~Node(){}

void Node::setPatternNode(int amplitude,int duration){
Node.amplitude=amplitude;
Node.duration=duration;
}
模式h

#ifndef Pattern_h
#define Pattern_h

#include "Arduino.h"
#include "Node.h"
#include "QueueArray.h"
#include "Motor.h"

class Pattern
{
public:
    Pattern();
    ~Pattern();
    Node setPattern(int amplitude[3],int duration[3]); 

};

#endif
Pattern.cpp:

#include "Arduino.h"
#include "Pattern.h"
#include "Node.h"
#include "QueueArray.h"
#include "Motor.h"

Pattern::Pattern(){}
Pattern::~Pattern(){}


Node Pattern::setPattern(int amplitude[3],int duration[3]){
QueueArray <Node> pattern;
for (int i=0;i<3;i++){
Node node;
node.setPatternNode(amplitude[i],duration[i]);
pattern.enqueue(pattern);
}
return pattern;
}
Motor.cpp:

#include "Arduino.h"
#include "Motor.h"
#include "QueueArray.h"
#include "Node.h"
#include "Pattern.h"

Motor::Motor(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}

Motor::~Motor(){}

void Motor::runMotor(){

 if(isMotorActive){
    pattern.dequeue(); 
    if(patternStartTime < currentPattern.duration){
        analogWrite(_pin,currentPattern.amplitute);
    } else{
        pattern.dequeue();
        if(pattern.isEmpty()){
            isMotorActive = false;
            currentPattern = null;
        }
    }
  }
}

void Motor::motorSetPattern(Node p){
currentPattern = p;
isMotorActive = true;
unsigned long patternStartTime = millis();  
}

您的#includes中至少有一个循环依赖项

Node.h文件包括Motor.h,它指的是
节点
。当Node.h包括Motor.h时,Motor.h指未定义的节点

如果您来自Java,您可能会想到像Java导入一样的
#include
。但是#include不仅仅导入类型名。在预处理过程中,“包含”将替换为“包含”文件的内容。需要更多注意循环的“包含”

您可以做的一件事是在motor.h中对类进行转发声明

class Node;
但是,这仅在使用类的指针或引用时有效,因此需要更改此方法的签名:

 #include "Node.h"

class Node;

class Motor
{
public: 
    ...
    void motorSetPattern( const Node & p);
    ...
};

TMC;博士DC可能是一个循环include。不要这样做。这在C++中没有任何意义:
Node.amplication=amplication
In file included from C:\Users\Yacine\Documents\Arduino\libraries\Motor/Node.h:6,
             from C:\Users\Yacine\Documents\Arduino\libraries\Motor/Motor.h:6,
             from mc_ino.ino:1:
C:\Users\Yacine\Documents\Arduino\libraries\Motor/Pattern.h:14: error: 'Node' does not      name a type
mc_ino.ino: In function 'void loop()':
mc_ino:21: error: 'class Pattern' has no member named 'setPattern'
class Node;
 #include "Node.h"

class Node;

class Motor
{
public: 
    ...
    void motorSetPattern( const Node & p);
    ...
};