首页 > 解决方案 > 尝试使用数组结构时出现 LNK2019 错误?

问题描述

我试图包含矩形的坐标以便与它们交互,并且我已经为 x 和 y 的 vec2 和具有两个点开始和结束的字段创建了两个结构。如果我现在尝试使用它,我会收到错误消息:

Main.obj:错误 LNK2019:引用函数“_wWinMain@16”中未解析的外部符号“_map”。

使用它的代码:

Field map[];

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) 
{
    //win32 stuff
    for (int i = 0, z = 0; i < rowLength; i++)
    {
        for (int j = 0; j < (int)(rowLength * 0.9); j++)
        {
            Field temp = { {(int)((startPos.x + 150 * j) * scale), (int)((startPos.y + 150 * i) * scale)}, 
                         {(int)(((startPos.x + 145) + 150 * j) * scale), (int)(((startPos.y + 145) + 150 * i) * scale)} };
            map[z] = temp;
            z++;
        }
    }
    //more win32 stuff
}

结构:

typedef struct
{
    float x;
    float y;
}vec2;

typedef struct
{
    vec2 startPos;
    vec2 endPos;
}Field;

如果我尝试给出数组长度,则会发生此错误:

Main.c(13):错误 C2057:需要常量表达式

Main.c(13):错误 C2466:无法分配具有常量大小 0 的数组。

标签: arrayscwinapistructcompiler-errors

解决方案


正如@kaylum 所说,微软编译器不支持可变长度数组。如果在编译阶段已知,请尝试以下代码:

const int rowLength = 10;
Field map[rowLength];

否则,在运行时使用 malloc:

Field* map = (Field*)malloc(rowLength * sizeof(Field));

推荐阅读