外部const char* const指针或外部const char数组[]导致链接错误

extern const char* const pointer or extern const char array[] cause link error

本文关键字:const 外部 char 错误 链接 数组 指针      更新时间:2023-10-16

代码:

file1.cc

#include <stdio.h>
const char *pointerString = "pointerString";
const char arrayString[] = "arrayString";
const char* const constpointerString = "constpointerString";
extern void printString();
int main(void)
{
    printString();
    return 0;
}

file2.cc

#include <stdio.h>
extern const char *pointerString;
extern const char arrayString[];
extern const char* const constpointerString;
void printString()
{
    printf("pointerString: %sn", pointerString);
    printf("arrayString: %sn", arrayString);
    printf("constpointerString: %sn", constpointerString);
}

完成命令:g++ file1。cc file2。Cc -o out错误链接:

/tmp/cczatCe9.o: In function `printString()':
file2.cc:(.text+0x1f): undefined reference to `arrayString'
file2.cc:(.text+0x30): undefined reference to `constpointerString'
collect2: ld returned 1 exit status

g++版本:4.6.3(Unbuntu/Linaro 4.6.3-1ubuntu5)

谁能帮忙??

将外部声明放在头文件中,并将其包含在两个源文件。在file1.cc中,arrayStringconstpointerString具有内键(因为这是const对象的默认值),所以不能从其他翻译单位看。

当然,你也可以定义它们:
extern char const arrayString[] = "arrayString";
extern char const* const constpointerString = "constpointerString";

但一般来说,最好使用标题