C++ &引用;节点";不命名类型
我有三个类Node、Pattern和Motor,它们都在同一个目录中 在Pattern类中,我定义了一个Node类型的函数,但是程序没有编译,请您帮忙好吗 以下是所有文件: 节点h: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
#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);
...
};