我无法理解下面的编译错误。
第一个文件是标题,test_weak.h
:
#ifndef TEST_WEAK_H
#define TEST_WEAK_H
#ifndef __ASSEMBLER__
const char* const TUTU __attribute__((weak)) ="TUTU";
const char* TUTU_DATE __attribute__((weak)) = __DATE__;
const char* const tutu ="tutu";
#endif /*ASSEMBLER*/
#endif /*TEST_WEAK_H*/
第二个文件是主要的test.cpp
:
int main ()
{
return 42;
}
要编译我运行:g++ -include test_weak.h test.cpp -o test
编译结果为:
In file included from <command-line>:0:0:
./test_weak.h:5:44: error: weak declaration of ‘TUTU’ must be public
通过在测试源文件上用 c 扩展名替换 cpp 扩展名并使用 gcc 而不是 g++,我能够成功运行此代码。我还可以通过删除弱属性或删除第二个常量来修复此错误。所以是的,我能够修复编译错误,但无法在这里理解问题的原因。
例如这一行编译没有问题:
const char* TUTU __attribute__((weak)) ="TUTU";
为什么我不能const char* const
在 c++ 中使用 + 弱属性?