3

我在 Arduino 中编写课程时遇到了一些麻烦。这是一个名为“Jerry”的类。它包含名为 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 中的格式)

Mouth、Move 和 Injection 类声明如下:

    #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

任何帮助将不胜感激。

4

2 回答 2

3

有两个循环依赖。

  1. Jerry 的类定义使用 Mouth,Mouth 继承 Button,Button 期望 Jerry 类已经定义。
  2. Jerry 的类定义使用 Move,Move 继承 Button,Button 期望 Jerry 类已经定义。

要解决这些问题,请使用前向声明。:-)

于 2013-04-19T00:04:36.330 回答
1

看起来您需要将其设置为libraries/Jerry/Jerry.hlibraries/Button/Button.h草图相同的文件夹中。

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

首先,在你的sketchbook 目录的libraries 子目录中创建一个Morse 目录。将 Morse.h 和 Morse.cpp 文件复制或移动到该目录中。现在启动 Arduino 环境。如果你打开 Sketch > Import Library 菜单,你应该在里面看到 Morse。该库将使用使用它的草图进行编译。如果库似乎没有构建,请确保文件确实以 .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);
}
于 2012-06-22T00:02:43.207 回答