C ++自动问题还是我的错误?!

时间:2016-03-05 07:10:45

标签: c++ directx direct3d10

是自动通用的,可以使用任何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不起作用?!

3 个答案:

答案 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 = ......