-1

是自动通用的并且可以与任何 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() 函数中应该引用步幅和偏移量,但会弹出错误,如果我用 UINT 更改其中一个步幅或偏移量,它可以工作,但为什么自动不起作用?!

4

3 回答 3

1

我已经解决了这个问题,IASetVertexBuffer() 需要两个 UINT 参数,而我的自动声明得到了两个简单的整数(步幅,偏移量),这是一个错误。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 );

PS 无论如何,如果我坚持使用自动,那么我将使用 (UINT*) 投射这些值并偏移,仅此而已。工作没有问题。

于 2016-03-05T09:40:10.057 回答
0

仅对迭代器和循环使用 auto。在我看来,使用 auto 是一个坏习惯。

如果你几天或几周后访问你的代码,你会讨厌自己在每个可能的变量上都使用 auto 。如果有其他编码人员必须阅读您的代码,请尝试完全避免它。

在你的特殊情况下?在这里使用 auto 会更好吗?UINT 和 auto 都有 4 个字母,所以懒惰不是原因。如果您正在查看您的代码并看到一个 UINT,您将立即知道该变量是什么类型。

于 2016-03-15T04:24:01.313 回答
-1

auto不是类型定义,而是存储类(如static)。

编译器抱怨是因为你告诉它如何以及在哪里(在这种情况下,在堆栈上)存储一些东西,但没有告诉它应该是什么

您应该在auto关键字之后添加类型定义,或者无论如何auto是默认值,将其替换为正确的类型。

UNIT stride = ......
于 2016-03-05T08:27:17.890 回答