[c++] 在Arduino草圖中包含.cpp和.h文件的正確方法



Answers

Question

一,問題:

主草圖文件:

char foo;            // required to clean up some other problems
#include <Arduino.h> // tried it in desperation, no help
#include "a.h"

void setup(){
  Serial.begin(9600);
  Serial.println("\nTest begins");
  for (int num = -1; num < 1; num++){
    Serial.print(num);
    if (isNegative(num)){
      Serial.println(" is negative");
    } else {
      Serial.println(" is NOT negative");
    }
  }
}

void loop(){}

//啊

#ifndef H_A
#define H_A

boolean isNegative(int x);                  // Err#1
int anotherOdity();

#endif // H_A

// a.cpp

#include "a.h"

int isNegative(int x){
  Serial.println("I can't print this from inside my INCLUDE FILE"); //Err#2
  if (x<0) return true;
  return false;
}

int anotherOdity(){
  char ch[5];
  memcpy(ch,"1",1);  //doesn't work, memcpy not declared      // Err#3
}

以上是,不編譯,這是我得到的錯誤:

In file included from a.cpp:1:
a.h:4: error: 'boolean' does not name a type
a.cpp: In function 'int isNegative(int)':
a.cpp:4: error: 'Serial' was not declared in this scope
a.cpp: In function 'int anotherOdity()':
a.cpp:11: error: 'memcpy' was not declared in this scope

第一個問題是布爾類型,似乎受到Arduino環境中的一些名稱的干擾,但通常由char foo; 在主文件中。 在某些情況下,它是。 但是在.cpp文件中使用該類型會生成此錯誤。

我可以看到錯誤2和錯誤3是相關的,但是我怎樣才能得到這些錯誤呢? 我意識到問題的一部分可能是#include本身(也許),因為Serialmemcpy尚未定義/聲明? 我嘗試了包括Arduino.h庫,但是沒有幫助。 實際上,它確實幫助了布爾問題,但是只有在將所有內容放在.h文件中的情況下(我將在下面進一步討論),這對上面的例子沒有幫助。

如果我把三個文件放在一起,並且在主草圖( .ino )文件中包含所有內容,那麼它就像它應該那樣工作。 但這裡的想法是我想打破一些代碼,使我的素描更可讀。

我找到了最接近的解決方案: http : //liudr.wordpress.com/2011/02/16/using-tabs-in-arduino-ide/在運行我自己的測試後,我確定如果我把所有東西放在一個.h文件,它的工作原理!

例如,將主草圖文件保持不變,如果我刪除a.cpp並創建只是ah (如下)它的作品!

#ifndef H_A
#define H_A

boolean isNegative(int x){
  Serial.println("I can't print this from inside my INCLUDE FILE");
  if (x<0) return true;
  return false;
}

int anotherOdity(){
  char ch[5];
  memcpy(ch,"1",1);  //doesn't work, memcpy not declared
}

#endif // H_A

這修正了布爾問題(好吧....我仍然需要Arduino.hchar foo; ),它修復範圍問題。

但它只是感覺不對。

這不是要創建一個我可以在各種草圖中使用的標準函數庫,而是將我的代碼分解成更小的(可讀的)塊,並將它們全部放在項目文件夾中。 我想以最正確的方式做到這一點,它似乎是我受IDE的限制。 我確定我對如何把頭文件和關聯的.cpp文件放在一起(我希望我沒有弄錯那部分)有一個合適的理解。

我完全自學了一切C / C ++,並且最近才真正進入編程微軟。

我已經通過谷歌的深度研究了這一點,我只是不斷地做出來。

不要訴諸hacks並保持像我這樣的民眾簡單,我怎麼能最好的把上面的例子,以便Arduino的IDE /海灣合作委員會編譯它呢?

編輯:我以為我會包括一些我已經打開的標籤顯示,我真的已經做了一些研究!

http://arduino.cc/en/Reference/Include

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

http://forum.arduino.cc/index.php/topic,124904.msg938861.html#msg938861

http://forum.arduino.cc/index.php?topic=84412.0 (這是我找到char foo;解決方案)

http://liudr.wordpress.com/2011/02/16/using-tabs-in-arduino-ide/

包括.cpp文件

將所有庫保存在Arduino草圖目錄中

C ++頭和CPP包括




Related