Arduino:用户定义的类型“不命名类型”

时间:2012-06-21 19:39:23

标签: class inheritance arduino

我在Arduino中编写课程时遇到了一些麻烦。这是一个名为“杰里”的课程。它包含三个用户定义类的实例,称为Mouth,Move和Injection。 Arduino IDE抱怨'嘴'没有命名类型,'移动'没有命名类型。如何让Arduino识别Mouth和Move作为有效类型?

   #ifndef JERRY_H
   #define JERRY_H
   include "Button.h"
   include "Injection.h"

   class Jerry 
   {

        protected:
            int BGL;
            double protein_conc;

        public:
            Jerry(int, int);
            Mouth mth;
            Move mv;
            Injection inj;
            volatile long prev_interrupt_time;
   };

   #endif // JERRY_H

(删除了#符号因为它搞砸了StackOverflow中的格式化)

嘴,移动和注入类声明如下:

    #ifndef BUTTON_H
    #define BUTTON_H
    include "Jerry.h"

    class Button
    {
        public:
            void setPin(int);
            int getPin();
            bool check(Jerry);
            virtual void run();
        protected:
            int pin;
   };

    class Mouth : public Button
    {
        public:
            int detectFood();
            void run();
    };

    class Move : public Button
    {
        public:
            bool checkLaughing();
            void runLaughing();
            bool checkSleep();
    };

    #endif // BUTTON_H

    #ifndef INJECTION_H
    #define INJECTION_H


    class Injection
    {
         public:
            void setPin(int, int, int, int);
            void checkInjection(); 

            void checkInjectionSite(); 
         protected:
            int pin1;
            int pin2;
            int pin3;
            int pin4;
    };

    #endif // INJECTION_H

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

有两个循环依赖。

  1. Jerry的类定义使用Mouth,Mouth继承Button,Button 期望已经定义了Jerry类。
  2. Jerry的类定义使用Move,Move继承Button,Button 期望已经定义了Jerry类。
  3. 要对这些进行排序,请使用前向声明。 : - )

答案 1 :(得分:2)

您似乎需要在草图所在的文件夹中将其设置为libraries/Jerry/Jerry.hlibraries/Button/Button.h

退房: http://arduino.cc/en/Hacking/LibraryTutorial

  

首先,在库的子目录中创建一个莫尔斯目录   你的速写本目录。复制或移动Morse.h和Morse.cpp   文件到该目录。现在启动Arduino环境。如果你   打开Sketch>导入库菜单,你应该看到莫尔斯里面。   该库将使用使用它的草图进行编译。如果是图书馆   似乎没有构建,确保文件真正以.cpp和。结尾   .h(例如,没有额外的.pde或.txt扩展名)。我们来看看如何   我们可以使用新库复制旧的SOS草图:

#include <Morse.h>

Morse morse(13);

void setup()
{
}

void loop()
{
  morse.dot(); morse.dot(); morse.dot();
  morse.dash(); morse.dash(); morse.dash();
  morse.dot(); morse.dot(); morse.dot();
  delay(3000);
}