- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
当我尝试构建以下开关时,出现“控制转移绕过初始化:”错误:
switch (retrycancel)
{
case 4: //The user pressed RETRY
//Enumerate all visible windows and store handle and caption in "windows"
std::vector<MainHandles::window_data> windows = MainHandles().enum_windows().get_results();
break;
case 2:
//code
}
这与我调用枚举函数有关。如果不允许在 switch 内调用函数,是否有解决此类问题的方法?
最佳答案
C++ 标准第 6.6.4 节:
The goto statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label (6.1) located in the current function.
C++ 标准第 6.7 节:
It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer
重点由我添加。由于 switch
实际上是 goto
变相的,因此您会遇到这种行为。要解决这个问题,如果必须使用 switch
switch (retrycancel)
{
case 4:
{
const std::vector<MainHandles::window_data> windows(
MainHandles().enum_windows().get_results()
);
break;
}
case 2:
//code
}
或重构为if
/else
if (retrycancel == 4) {
const std::vector<MainHandles::window_data> windows(
MainHandles().enum_windows().get_results()
);
} else if (retrycancel == 2)
// code
} else {
...
}
虽然在 switch
中创建 windows
vector
对我来说并不明显,但你可能想要重新思考你的设计。 注意我在 windows
中添加了一个 const
限定符,因为它在您的示例中没有被修改。
关于c++ - 调用函数时切换 "transfer of control bypasses initialization of:",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136295/
假设我有一个像这样的Dockerfile: FROM debian:stretch RUN apt update RUN apt install -y wget RUN wget https://st
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在我正在创建的网络应用程序中,使用了很多媒体。因此,如果每次加载页面时都必须重新加载该媒体,就会有很大的压力。 (由于媒体不在页面内,而是通过 websockets 检索的,我怀疑浏览器是否会缓存它)
我正在努力做到这一点,以便当用户点击时发生这种情况。 按顺序, Does something. (Not being specific, this isn't the important part.)
我这里有个小问题。我知道 Linux 限制了用户实际可以运行的线程数。 我正在使用 pthread_create 和一个限制为 50 ( pthread_t tid[50]; ) 的 pthread_
第一次在这里提问,我通常不需要发布任何东西就可以找到我所有的答案,但今天我被困在我的小程序中(我不是程序员所以如果错了我可能会这样做)。这是问题所在:我正在阅读日志文件,同时寻找一些关键字,相当简单。
想一想,我们可以在开发应用程序时绕过 iPhone/iPad 应用程序的 Splash-Screen 吗?实际上,我需要没有启动画面的应用程序,但是如果我没有在 X 代码中为启动画面设置图像,它在启动
我有一个 RStudio 项目,它使用 renv 管理包,效果很好。 但有时我想在我的主环境(正确的词?)上使用库来调试或探索一些我不想添加到项目中的东西。例如,也许我想运行一些长调试函数并在最后调用
我有一个 RStudio 项目,它使用 renv 管理包,效果很好。 但有时我想在我的主环境(正确的词?)上使用库来调试或探索一些我不想添加到项目中的东西。例如,也许我想运行一些长调试函数并在最后调用
我制作了一个小型应用程序,我必须根据关键字检索 URL。这是代码: Elements doc = Jsoup .connect(request) .userAgen
我需要计算非常大的数字之间的比率,如代码所示: import scipy.special x=2000 n=range(8,x+1) q=[] for i in range(0,len(n)):
我想通过在多个条件下连接多个表来选择行...但它失败了。 PonyORM似乎限制了“if 语句”中的条件数量。 在 estore.py/test_queries (PY3.6, PonyORM 0.7
我在使用 AddConventionalPlugin 时遇到此错误: 你必须传入插件实例的类型——比如 typeof(Cirrious.MvvmCross.Plugins.Visibility.Win
在 CircleCI 中使用 apt-get 时,我得到 Press [ENTER] to continue or ctrl-c to cancel adding it。如何自动绕过它? 我尝试使用
因此,我目前在 Google 的 Compute Engine 平台上租用了一台大型服务器,每月费用约为 180 美元。我以前从未设置过邮件服务器并掌握了 Exim4,并且在我发现 Google 阻止
我得到一个网址: r = requests.get("http://myserver.com") 正如我在“myserver.com”的“access.log”中看到的,使用了客户端的系统代理。但我想
我在 Mathematica 中从未出现过溢出错误,发生了以下情况。 我演示了 RSA 加密的原理如下: n = 11*13 m = EulerPhi[n] e = 7 GCD[e, m]
我想在某些情况下绕过Spring webflow(Spring 2.0.5)应用程序的登录表单(因此该登录表单是为普通用户提供的,但是当URL像http://server.com/myspringap
我们最近在我们的应用程序中实现了 okta。 每当用户想要登录时,它都会要求输入 okta 代码,该代码每 30 秒会不断变化,但是在运行 selenium 时,我应该如何输入 okta 代码? 我可
我正在构建一个网络应用程序,用户可以在其中与其他用户共享链接。 让我们用一个例子来说明我的问题: Alice 正在使用网络应用。 Alice 通过 Messenger API 分享与 Bob 的链接。
我是一名优秀的程序员,十分优秀!