2014-07-19 40 views
-3

我有三个类节点,模式和电机,他们都在同一个目录中 在Pattern类中我定义了一个Node类型的函数,但程序不能编译,你能请帮忙?“节点”没有命名一个类型

这里的所有文件:

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 

节点的.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; 
} 

Pattern.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.h:

#ifndef Motor_h 
#define Motor_h 

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

class Motor 
{ 
public: 
Motor(int pin); 
~Motor(); 
void runMotor(); 
int _pin; 
bool isMotorActive; 
void motorSetPattern(Node p); 
Node currentPattern; 

}; 

#endif 

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(); 
} 

速写:

#include <Motor.h> 
#include <Node.h> 
#include <Pattern.h> 
#include <QueueArray.h> 

Motor vibmotor(13); 
Node node; 
Pattern pattern; 

int amplitude[3] = {5,2,0}; 
int duration[3] = {1000,2000,1000}; 

void setup() 
{ 
} 

void loop() 
{ 
pattern.setPattern(amplitude,duration); 
vibmotor.runMotor(); 
} 

错误:

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' 
+2

** TMC; DR; DC **可能是一个循环包括。不要这样做。 –

+1

这在C++中没有任何意义:'Node.amplitude = amplitude;'。 – juanchopanza

回答

3

您的#include包含至少一个循环依赖项。

Node.h文件包括Motor.h,这是指Node。当Node.h包含Motor.h时,Motor.h在定义之前引用节点。

如果您来自Java,您可能会想到像Java导入一样的#include。但是,#include不会导入类型名称。在预处理过程中,#include被替换为#include文件的内容。 Circular#include需要更多关注。

一两件事你可以做的是向前声明的类,在motor.h:

class Node; 

但是,这只能如果你使用指针或对类的引用,所以你需要改变该方法的签名:

#include "Node.h" 

class Node; 

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