错误 C2102:“&”需要左值,VS2019。怎么修?

Error C2102: '&' requires l-value, VS2019. How to fix?

我正在使用 DirectX 11 并尝试使用 XMLoadFloat4 在范围内本地加载变量。我做了很多,名字很长,所以我不想创建一堆局部变量,但是使用这样的代码:

XMStoreFloat4(&vertices[0].normal, XMVector3Cross(
        XMLoadFloat4(&(vertices[2].position - vertices[0].position)),
        XMLoadFloat4(&(vertices[0].position - vertices[1].position))
        ));

我正在获取 C2102。你知道像这样就地创建引用的优雅方法吗?

Do you know elegant way to create reference in place like this?

该函数需要指针,而您正试图传递不允许的临时地址。只需将临时结果存储在变量中并将地址传递给这些变量:

auto a = vertices[2].position - vertices[0].position;
auto b = vertices[0].position - vertices[1].position;

XMStoreFloat4(
    &vertices[0].normal,
    XMVector3Cross(
        XMLoadFloat4(&a),
        XMLoadFloat4(&b)
    )
);

您现在可以通过在 C/C++ -> 语言项目设置中将“一致性模式”更改为“否”来禁用 /permissive- 来解决此问题。