【发布时间】:2020-03-16 23:10:42
【问题描述】:
我在将游戏从 Mac 移植到 Windows 时遇到了将 SDL_Rects 传递给几个函数的问题。以下是一些伪代码来代表我的问题:
void someFunction(SDL_Rect rect)
{
// Does something
}
someFunction((SDL_Rect) {0, 0, 10, 10});
每当我执行上述操作时,Visual Studio 都会说这是一个错误。它在 Xcode 中工作得很好,并且似乎不是特定于平台的东西,因为它只是聚合初始化,所以有人可以解释为什么吗?
【问题讨论】:
-
你把VS设置成C++17了吗?
-
你没有创建一个临时的
SDL_rect,不是真的。您正在创建其他东西(如果我确定我会回答什么)并将其转换为SDL_rect。someFunction(SDL_Rect {0, 0, 10, 10});会做一个临时的。 -
如果 VS 说这是一个错误,在您的问题中显示该错误会很有帮助。
-
@Ron 在后台可能会更神奇。当我使用 gcc 8.3
-pedantic为 C++17 编译时,会发出警告 ISO C++ 禁止复合文字,所以我假设我们得到了复合文字。由于 pedantic 说它不是 kosher,所以我得出的结论是它来自 C99,而 MSVS 不支持它。 godbolt.org/z/tFsV4H -
你可能想要
SDL_Rect{0,0,10,10}。
标签: c++ visual-c++ clang