【发布时间】:2021-03-26 15:22:17
【问题描述】:
所以,我创建了一个项目并将this tutorial 复制到其中。当我尝试运行它时,它给了我这个错误:C2102 & requires l-value at
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
我搜索了很多,但没有找到适合上下文的内容。我能做些什么来解决它?
【问题讨论】:
-
CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get()产生的任何东西都可能寿命太短,以至于指向它的指针没有任何价值。对象会消失,并且指针在可以使用之前无效,否则会浪费时间来更新在使用之前会消失的值.. -
这段代码看起来像是在创建一个临时的
Transition对象。使用&address-of 运算符获取临时地址是非法的。 -
刚刚检查过。
Transition按值返回CD3DX12_RESOURCE_BARRIER。这使它成为纯右值,并且您不能获取纯右值的地址。您可以做两步,第一步调用Transition并将返回值存储到变量中。现在您有一个lvalue,您可以在调用ResourceBarrier时获取一个使用地址。这是否是一个好主意需要更多的上下文。如果ResourceBarrier存储该指针并在当前函数存在后尝试使用它,则局部变量可能没有足够长的寿命。
标签: c++ visual-studio-2019 directx-12