arrays - 尝试使用数组结构时出现 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 的数组。
解决方案
正如@kaylum 所说,微软编译器不支持可变长度数组。如果在编译阶段已知,请尝试以下代码:
const int rowLength = 10;
Field map[rowLength];
否则,在运行时使用 malloc:
Field* map = (Field*)malloc(rowLength * sizeof(Field));
推荐阅读
- python - 在python中的特定行中写入的响应方式?
- python - Python的迭代器解包(star unpacking)是如何实现的(或者说,自定义迭代器的解包涉及哪些神奇的方法?)
- stripe-payments - 如何通过 Stripe 付款集成添加稍后付款选项?
- javascript - 如何在 saml2-js 中指定私钥的密码?
- c - 书库,结构和malloc
- visual-studio-code - 编辑 VS 代码 editor.wordSeparator 设置,当我删除整个单词时,在第一个大写字母后停止(例如 capLocks ---> cap)
- c# - 重写 ValidationAttribute ErrorMessage,从字符串到新的 ErrorModel 类
- dictionary - ansible 映射一个属性
- python - 通过两个 1 维制作 2 维数组
- swiftui - Xcode 12 中的颜色暗外观 - SwiftUI