在受保护的范围内切换C++ xcode
Switch in protected scope C++ xcode
我收到此代码的"受保护范围内的开关错误"。这是一个与本网站上其他一些问题大致相似的问题,但是我没有初始化案例中的变量,添加大括号没有区别。
switch (switchval){
case 1:
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByDurationLow); //chooses op with smallest duration
break;
case 2:
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByDurationHigh); //chooses op with biggest duration
break;
case 3:
//chooses op with lowest total job time remaining - need to calculate these
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByRemainingJobTimeLow);
break;
case 4:
//chooses op with lowest total job time remaining - need to calculate these
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByRemainingJobTimeHigh);
break;
case 5:
//this chooses randomly!
int randVal = round(randomGen(-0.49999, opsThatCanWork.size()-1+0.49999));
opsThatCanWork.at(0) = opsThatCanWork.at(randVal);
break;
case 6:
//first in the quene for a machine
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByStartTimeLow);
break;
case 7:
sort(opsThatCanWork.begin(), opsThatCanWork.end(), sortByStartTimeHigh);
break;
}
错误位于声明"案例 6"和"案例 7"的行上
不允许跳转(包括从 switch
跳转到大小写)绕过初始化变量的声明,除非在有限数量的情况下。
可以转移到块中,但不能绕过初始化声明的方式。一个 从具有自动存储持续时间的变量不在范围内的点跳转到 它在作用域中的点格式不正确,除非变量具有标量类型,具有普通默认值的类类型 构造函数和简单析构函数、这些类型之一的 CV 合格版本或其中一种的数组 前面的类型,并在没有初始值设定项 (8.5) 的情况下声明。
因此,如果您在声明中有初始值设定项,则绝对禁止使用。
请注意,案例6 和 7 会触发错误,因为如果跳转到案例 5,标签位于声明之前,因此没有问题。
正如您在对另一个答案的评论中已经指出的那样,在案例 5 中变量的初始化周围加上大括号可以解决问题。
case 5:
//this chooses randomly!
----------------V variable initialization
int randVal = round(randomGen(-0.49999, opsThatCanWork.size()-1+0.49999));
opsThatCanWork.at(0) = opsThatCanWork.at(randVal);
break;
警告:这不是对你的问题的直接回答 - 但它很可能有助于重组代码以使其更好。
根据案例 5 的代码,您似乎只需要选择最小的项目(根据各种测量方法之一)并将其放入opsThatCanWork[0]
。
如果是这种情况,您可以通过使用 std::min_element
而不是 std::sort
来提高所有其他情况(我的意思是 5 种除外)的代码运行速度。 std::sort
花费了相当多的时间将所有项目整理好,但您显然只关心找到一个元素。这正是std::min_element
的设计目的。
至少乍一看,在我看来,您的案例 5 代码也可能有一个错误。所有其他情况只是重新排列opsThatCanWork
中的现有元素。但是,案例 5 的代码用其他一些随机值覆盖现有的第一个值。如果您只执行此代码一次,并且不再需要该数组/向量,那么这可能没问题 - 但是如果您再次使用该向量中的数据,则每次执行案例 5 的代码时,您都会丢失另一个数据项(并最终得到两个相同的项)。重复几千次,数组可能包含单个值的 N 个副本,而不是 N 个值。
您可能希望通过opsThatCanWork[0]
与随机选择的元素交换而不是覆盖它来解决此问题。
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- Xcode 语义问题引用或以前定义的代码
- 使用 Xcode 将双精度存储在数组C++中
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- Qt - 从XCode上传到MacOS AppStore
- 在 xcode 10 上找不到 stdlibc++ 标头错误
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- 在 xcode 上使用 stdlib.h
- 我可以在没有Xcode的情况下在Mac上使用带有C++的虚幻引擎吗?
- 为什么不支持 Xcode 1.5?
- C++ Xcode 9 - 无法从 Cimg 调用函数 display()
- Xcode 中的加速框架以获得 A 的 QR 分解,但找不到 zgeqrf
- 如何将 PhysX 库与 Xcode 链接
- Xcode Test Navigator 如何在纯C++项目中显示 Google 测试
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- Xcode 添加新库