是自动通用的,可以使用任何API,或者我没有正确使用它我想应该在这种情况下工作但错误,如果我将改变它具体类型将起作用,但为什么?
// Set vertex buffer
auto stride = m_FullScreenVTFTonemapPass.stride;
auto offset = m_FullScreenVTFTonemapPass.offset;
m_pD3DDevice->IASetInputLayout( m_FullScreenVTFTonemapPass.IALayout );
m_pD3DDevice->IASetVertexBuffers ( 0, 1, &m_FullScreenVTFTonemapPass.VBdata, &stride, &offset );
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );
在IASetVertexBuffers()函数中的应该引用stride和offset但是会弹出错误,如果我用UINT改变其中一个步幅或偏移它可以工作但是为什么auto不起作用?!
答案 0 :(得分:1)
我已经解决了问题,因为IASetVertexBuffer()需要两个UINT参数,而我的自动声明得到两个简单的整数(stride,offset),这是一个错误。 IASetVertexBuffer()无法从int转换为UINT *参数。那就是它。
auto stride = quad->stride;
auto offset = quad->offset;
m_pD3DDevice->IASetInputLayout( quad->IALayout );
m_pD3DDevice->IASetVertexBuffers(0, 1, &quad->VBdata, (UINT*)&stride, (UINT*)&offset);
m_pD3DDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );
P.S。无论如何,如果我坚持使用auto,那么我将使用(UINT *)来表示这些值的步幅和偏移量。工作没有问题。
答案 1 :(得分:0)
仅将auto用于迭代器和循环。在我看来,使用汽车是一个坏习惯。
如果您在几天或几周后访问您的代码,您会讨厌在每个可能的变量上使用auto。如果有其他编码人员必须阅读您的代码,请尽量避免使用它。
在你的特殊情况下?在这里使用auto时你会有什么好处? UINT和auto都有4个字母,所以懒惰不是原因。如果您正在查看代码并且看到UINT,您将立即知道该变量的类型。
答案 2 :(得分:-1)
auto 不是类型定义,而是存储类(例如 static )。
编译器抱怨,因为你告诉它如何以及在哪里(在这种情况下,在堆栈中)存储某些东西,而不是某些东西应该是什么。< / p>
您应该在 auto 关键字之后添加类型定义,或者 auto 是默认值,替换使用正确的类型。
UNIT stride = ......