gpt4 book ai didi

c++ - header 中结构数组的链接器错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:18 27 4
gpt4 key购买 nike

我正在做一个大项目的一小部分。该项目最初是用 C 编写的,大约在 6 年前过渡到 C++(我大约 3 周前第一次听说该项目...)

一切都编译得很好。我遇到的错误来自链接器:

libBlah.so.0.0: undefined reference to `Extent::structArray'
collect2: error: ld returned 1 exit status

错误发生在它首先尝试链接的任何可执行文件上;有一些可执行文件,每个都依赖于 Extent 类和 structArray 数据成员。在尝试(但失败)链接其他可执行文件之前,它成功链接了整个 libBlah 库。

Extent.hpp中,在Extent类声明的public部分,声明了structArray(并被 hackily 初始化)因此:

struct structThing
{
const char *name;
int compress_flag;
bool (*func1)( byte*, int32, ByteArray&, int );
bool (*func2)( byte*, byte*, int32, int32& );
};

// This isn't actually a magic number
static const int num_things = 7;

static structThing structArray[ num_things ];

struct structArray_init
{
structArray_init()
{
structThing init[] =
{
{ "none", 0, NULL, NULL },
{ "thingA", 1, funca1, funca2 },
{ "thingB", 2, funcb1, funcb2 },
{ "thingC", 4, funcc1, funcc2 },
{ "thingD", 8, funcd1, funcd2 },
{ "thingE", 16, funce1, funce2 },
{ "thingF", 32, funcf1, funcf2 }
};

for( int i = 0 ; i < num_things ; ++i )
{
structArray[i] = init[i];
}
}
};

static structArray_init thingy_init;

所有 12 个函数(funca1 到 funcf2)都是 Extent 的静态函数,稍后在 header 的公共(public)部分声明。

构建由 CMake 管理。基本上,在 CMake 中,每个单独的依赖程序都被赋予了整个 libBlah 库作为依赖项。我试过调整链接顺序,但无济于事。

在此链接器错误之前,我在 Extent 的非静态函数中初始化 structArray 导致编译错误,这显然是有问题的。

最佳答案

我认为您的问题可能是您忘记在 CPP 文件中实际定义 static 成员,如下所示:(在 Extent.cpp)

Extent::structThing Extent::structArray [Extent::num_things];
Extent::structArray_init Extent::thingy_init;

关于c++ - header 中结构数组的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com