编译错误:[build] main.cpp:8:未定义对“ pallete”的引用
示例代码:common.cpp
const unsigned char pallete[] = {0, 60, 100, 119};
int a = 1;
main.cpp
#include <iostream>
extern const unsigned char pallete[];
extern int a;
int main() {
std::cout << a << std::endl;
std::cout << pallete[0] << std::endl;
return 0;
}
[您的编译器很可能会执行我的警告:Warnung: variable 'pallete' is not needed and will not be emitted
如果同时在extern
中添加common.cpp
语句,它也应该起作用。
如果声明某些内容extern
,则应始终在每个要使用该变量的人都包含的标头中进行操作。
您必须在extern
中声明托盘common.cpp
。现在,main.cpp
现在应该在单独的文件中“寻找”货盘,但是common.cpp
将其视为本地文件,因为它是const
,如此处所说https://en.cppreference.com/w/cpp/language/cv#Notes
注意
未声明为extern的非局部非易失性非模板(自C ++ 14起)非内联(自C ++ 17起)的声明所使用的const限定符为其提供了内部链接。这不同于const文件范围变量具有外部链接的C语言。
extern const unsigned char pallete[] = {0, 60, 100, 119};
int a = 1;