外部数组会出现未定义的引用错误,但对于int效果很好

问题描述 投票:0回答:1

编译错误:[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;
}


c++ extern
1个回答
0
投票

[您的编译器很可能会执行我的警告:Warnung: variable 'pallete' is not needed and will not be emitted

如果同时在extern中添加common.cpp语句,它也应该起作用。

如果声明某些内容extern,则应始终在每个要使用该变量的人都包含的标头中进行操作。


0
投票

您必须在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;
© www.soinside.com 2019 - 2024. All rights reserved.