Arduino bibliothèque: plusieurs définitions de fonction

Aujourd'hui, j'ai rencontré un problème bizarre lors de l'utilisation de IRremote bibliothèque, et j'ai réussi à démonter le problème de la manière suivante. Si vous avez un dossier dans les bibliothèques, avec Foo.h et Foo.cpp à l'intérieur, et écrire une esquisse d'inclure des Foo.h:

Foo.h

#ifndef Foo_H
#define Foo_H

int AAA() {
    return 0;
}

#endif

Foo.cpp

#include "Foo.h"

Esquisse

#include <Foo.h>

void setup(){

}

void loop(){

}

Le message d'erreur est:

 Foo\Foo.cpp.o: In function `AAA()':

 E:\workShop\Arduino\libraries\Foo\/Foo.h:5: multiple definition of `AAA()'

 includeTest.cpp.o:E:\workShop\Arduino\libraries\Foo/Foo.h:5:

 first defined here

Je suis sur un Windows 7 32 bits de la machine. Testé sur un Arduino 1.0.5, 1.0.4, et 21, 22.


Ainsi, avec un peu de recherche, j'ai trouvé le problème vient de ma confusion de préprocesseur et de liaison. Cette question explique comment préprocesseur inclut le fichier et comprennent garde:

Ces quelques pages m'ont aidé à comprendre la liaison:

Et c'est une meilleure explication de inline rédacteur de devis:

OriginalL'auteur Xun Yang | 2013-06-14