2011-03-23 3 views
0

저는 LED 보드를 구동하는 라이브러리입니다. 파일extern없이 헤더에 정의 된 사용 변수 C++

led.cpp

#include "led.h" 
//function implementation 

led.h font.h led.cpp, led.h을 포함

#ifndef led_h 
#define led_h 

#include "font1.h" 
class LED{ 
    //some code, which uses char defined in font.h 
} 

font.h

#ifndef font_h 
#define font_h 

//Letter mapping to pixel 

char CH200[] PROGMEM = "11111111"; 
char CH201[] PROGMEM = "11000011"; 
char CH202[] PROGMEM = "11111111"; 
char CH203[] PROGMEM = "11111001"; 
char CH204[] PROGMEM = "11000111"; 
char CH205[] PROGMEM = "11111111"; 
char CH206[] PROGMEM = "11111111"; 
char CH207[] PROGMEM = "11111111"; 

// many many more definition here 

#endif 

이제 그 프로그램에 내가

#include "led.h" 

을했다, 그래서 다른 프로그램에서이 라이브러리를 사용하고자하지만이 같은 컴파일하는 경우, 그것은 그 CH20X의 문자의 여러 정의에 대해 불평. 이 문제를 해결하는 방법에 대한 조언이 필요하십니까?

답변

3

물론 :

const char CH200[] PROGMEM = "11111111"; 
const char CH201[] PROGMEM = "11000011"; 
// etc 
+0

const 감사합니다 사용합니다. 그것은 작동합니다! –

+0

왜 작동합니까? 설명 없습니까? – dcousens

+0

@Daniel : 그것은 연결을 변경하여 작동합니다. 링키지 (예 :'extern')를 변경하는 다른 방법이 있지만 최적화를 방지하거나 '크기'정보를 잃지 않습니다. –

0

static 각 CH20X 정의를 붙이는 시도 :

static char CH200[] PROGMEM = "11111111"; 
2

은 C 파일을 정의하고 H 파일의 통근 참조를 배치합니다.

font.h

#ifndef font_h 
#define font_h 

//Letter mapping to pixel 

extern char CH200[] PROGMEM; 
extern char CH201[] PROGMEM; 
extern char CH202[] PROGMEM; 
extern char CH203[] PROGMEM; 
extern char CH204[] PROGMEM; 
extern char CH205[] PROGMEM; 
extern char CH206[] PROGMEM; 
extern char CH207[] PROGMEM; 

// many many more definition here 

#endif 

font.cpp

//Letter mapping to pixel 

char CH200[] PROGMEM = "11111111"; 
char CH201[] PROGMEM = "11000011"; 
char CH202[] PROGMEM = "11111111"; 
char CH203[] PROGMEM = "11111001"; 
char CH204[] PROGMEM = "11000111"; 
char CH205[] PROGMEM = "11111111"; 
char CH206[] PROGMEM = "11111111"; 
char CH207[] PROGMEM = "11111111"; 
관련 문제