我必须在代码中定义一个大型数组(查找表)。 它包含256个元素,占用近1个电脑屏幕。
有两个函数正在使用此数组。 我想在函数下定义这个数组,所以我可以在开发过程中非常快地访问它们。
但如果我尝试在一个文件中执行此操作,编译器将在函数周围给出“未声明的标识符”错误 - 因为它们使用数组。
因此,我必须将函数和数组放在单独的文件中。
以下是我的计划结构:
main.cpp:
#include "lookup.h"
...uses two functions...
-
lookup.h:
#ifndef SubMaster_lookup_h
#define SubMaster_lookup_h
void func1(void);
void func2(void);
char LookupTable[][3]={ "00", "01", "02" "03", "04", "05", "06", "07", "08", "09",
"0a", "0b", "0c", "0d", "0e", "0f", "00", "01", "02" "03", "04", "05", "06", "07",
"08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", and so on...}
-
lookup.cpp:
#include "lookup.h"
void func1() {
...body of func1...
}
void func2() {
...body of func2...
}
以下结构在构建期间为我提供了“ld:duplicate symbol _LookupTable”。 有没有办法改变结构,所以不会出错?
答案 0 :(得分:9)
两种方式:
试试这个:
lookup.h
extern char LookupTable[][3];
lookup.cpp
#include "lookup.h"
char LookupTable[][3] = ...
这answer很好。
答案 1 :(得分:2)
将其放入.cpp
并将extern
声明写入.h
。或者,将其标记为static
(但这将导致包含.cpp
的每个.h
的查找表的附加副本,因此您应该避免使用它。)
答案 2 :(得分:2)
您可以在标头中添加extern char const lookupTable[][3];
,并在源文件中包含实际实现:
#include "header.h"
char const lookupTable[][3] = { /* ... */ }
或者,在标题中将数组声明为static char const lookupTable[][3] = /*...*/
,但随后在每个TU中都会重复复制(每个都有静态(即内部)链接)。