Arduino의 다중 정의 클래스
여기서 도와주세요. 내가 뭘 놓치고 있는지 모르겠다. 내 arduino IDE 에이 코드가 있습니다.
#include "Foo2.h"
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
그리고 5 개의 파일이 있습니다 : Foo.h, Foo.cpp, Foo2.h, Foo3.cpp 및 Foo.h
Foo.h
#ifndef Foo_H
#define Foo_H
class Foo
{
public:
Foo();
public:
bool Fooa();
bool Foob();
};
#endif
Foo.cpp
#include "Foo.h"
Foo::Foo()
{
}
bool Foo::Foob()
{
return true;
}
Foo2.h
#ifndef Foo2_H
#define Foo2_H
#define LIBRARY_VERSION 1.0.0
#include "Foo.h"
bool Foo::Fooa()
{
return true;
}
#endif
Foo3.h
#ifndef Foo3_H
#define Foo3_H
#include "Foo2.h"
class Foo3
{
public:
Foo3();
Foo _foo;
};
#endif
Foo3.cpp
#include "Foo3.h"
Foo3::Foo3()
{
}
그리고 그것은 나에게 오류를줍니다.
libraries\Foo\Foo3.cpp.o (symbol from plugin): In function `Foo::Fooa()':
(.text+0x0): multiple definition of `Foo::Fooa()'
sketch\kk2.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
내가 뭘 잘못하고 있니
문안 인사,
답변
당신이 원하는 경우 Fooa()
하나 개 이상의 .cpp 파일에 포함 할 수있는 헤더에 정의 될, 그렇게 같은 인라인 함수로 선언해야합니다 :
#ifndef Foo_H
#define Foo_H
class Foo
{
public:
Foo();
public:
inline bool Fooa();
bool Foob();
};
#endif
또는 클래스 정의 내에서 직접 함수 정의를 제공 할 수 있습니다. 이것은 또한 키워드가 inline
필요하지 않아도 기능을 만듭니다 inline
.
또는 Fooa
인라인이 아닌 함수 로 유지하려면에서 했던 것처럼 정의를 헤더에서 .cpp 파일로 이동해야합니다 Foob()
.
함수를 인라인으로 만드는 것은 함수의 코드가 호출 사이트에서 생성되기를 원한다는 것을 의미하는 것 이상의 두 번째 효과입니다. 컴파일러 (또는 더 정확하게 링커)에게 함수에 대한 코드의 여러 정의 (동일해야 함)를 볼 것으로 예상합니다. 사전 알림 없이는 multiple definition of
함수 정의가 .cpp 파일을 통해 여러 .cpp 파일에 삽입 될 때 오류가 발생합니다 #include
.
참고로 : #include
복사 및 붙여 넣기의 자동화 된 형태입니다. 논리적으로 다른 파일의 내용 (및 도달 가능한 모든 #include
사용)을 #include
지시문이 나타난 위치에 배치합니다 . 다른 언어에서 비슷한 모양의 많은 지시문과 동일한 방식으로 작동하지 않습니다. 예 를 들어 Java 또는 Python #include
과 같은 import
키워드 처럼 작동하지 않습니다 .