【问题标题】:extern const char* const pointer or extern const char array[] cause link error [duplicate]extern const char* const 指针或 extern const char array[] 导致链接错误 [重复]
【发布时间】:2014-05-19 16:32:44
【问题描述】:

代码如下:

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: %s\n", pointerString);
    printf("arrayString: %s\n", arrayString);
    printf("constpointerString: %s\n", 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)

有人可以帮忙吗??

【问题讨论】:

  • const 对象具有内部链接,因此变量在外部不可见。
  • 随便想想,我从http://stackoverflow.com/questions/14977058/extern-const-char-const-some-constant-giving-me-linker-errors得到答复

标签: c++ c ld


【解决方案1】:

将你的外部声明放在头文件中,并将其包含在 两个源文件。正在发生的事情是在file1.ccarrayStringconstpointerString 有内部链接 (因为这是 const 对象的默认值),所以不能 从其他翻译单位可以看到。

当然,您也可以定义它们:

extern char const arrayString[] = "arrayString";
extern char const* const constpointerString = "constpointerString";

但一般来说,还是用header比较好。

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多