我一直想知道这一点 - 为什么你不能在switch语句中的case标签之后声明变量?在C++中,您可以在任何地方声明变量(并且声明它们接近第一次使用显然是一件好事)但是以下仍然不起作用:
switch (val)
{
case VAL:
// This won't work
int newVal = 42;
break;
case ANOTHER_VAL:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
以上给出了以下错误(MSC):
'case'标签跳过'newVal'的初始化
这似乎也是其他语言的限制.为什么会出现这样的问题?
切入追逐我已经重新创建了我的问题,因为它是相当自我解释的.
这符合,没有错误:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这编译错误,它只缺少NSLog():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
它在编译时出现错误"NSString'之前的预期表达式 "
我在这里错过了什么吗?
我想我会失明,因为我无法弄清楚此代码中语法错误的位置:
if( cell == nil ) {
titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier ] autorelease
];
switch( cellNumber ) {
case 1:
NSString *viewDataKey = @"Name";
etc...
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我在最后一行的'*'标记之前收到错误:语法错误.
对不起这个基本问题,但我错过了什么?
可能重复:
在switch语句中声明变量
我很难让XCode让我在Objective-C中编写一个特定的switch语句.我很熟悉语法,可以像/ if块一样重写它,但我很好奇.
switch (textField.tag) {
case kComment:
ingredient.comment = textField.text;
break;
case kQuantity:
NSLog(@""); // removing this line causes a compiler error
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
fmt.generatesDecimalNumbers = true;
NSNumber *quantity = [fmt numberFromString:textField.text];
[fmt release];
ingredient.quantity = quantity;
break;
}
Run Code Online (Sandbox Code Playgroud)
我看不到语法错误,就好像我需要欺骗编译器允许这样.
我的代码有3个类n_hexa,n_octa,n_bin.代码在这里
switch(choice)
{
case 1: cin>>n;
n_hexa nx(n);
break;
case 2: cin>>n;
n_octa no(n);
break;
case 3: cin>>n;
n_bin nb(n);
break;
}
Run Code Online (Sandbox Code Playgroud)
在编译它时,为n_octa行提供消息" n_hexa的初始化 "
我在这段代码中遇到了编译错误:
switch(event) {
case kCFStreamEventHasBytesAvailable:
UInt8 buf[BUFSIZE];
CFIndex bytesRead = CFReadStreamRead(stream, buf, BUFSIZE);
if (bytesRead > 0) {
handleBytes(buf, bytesRead);
}
break;
case kCFStreamEventErrorOccurred:
NSLog(@"A Read Stream Error Has Occurred!");
case kCFStreamEventEndEncountered:
NSLog(@"A Read Stream Event End!");
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
该行UInt8 buf[BUFSIZE];导致编译器抱怨"UInt8之前的预期表达式"为什么?
谢谢!
有时Xcode会在案例后的行上显示错误" 预期表达式 ".例如,Xcode指向带有红色箭头的UserContentViewController:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case IndexVideo:
UserContentViewController* detailViewController = [[UserContentViewController alloc] initWithUser:self.user];
[self.navigationController pushViewController:detailViewController animated:YES];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在我的案子周围放置括号,错误就消失了.首先,我想知道不使用大括号的问题是什么.在任何其他语言的情况下,我从未使用大括号.其次,为什么Xcode只会在极少数情况下抱怨我的案件?我无法辨别哪种类型的代码会触发此错误.
除非我的理解不正确,否则以下宏
int i; // for loop
const char* ctype; // proprietary type string
void** pool = malloc(sizeof(void*) * (nexpected - 1));
size_t poolc = 0;
#define SET(type, fn) type* v = (pool[poolc++] = malloc(sizeof(type))); \
*v = (type) fn(L, i)
#define CHECK(chr, type, fn) case chr: \
SET(type, fn); \
break
switch (ctype[0]) {
CHECK('c', char, lua_tonumber);
}
Run Code Online (Sandbox Code Playgroud)
应该扩展到
int i; // for loop
const char* ctype; // proprietary type string
void** pool = malloc(sizeof(void*) * (nexpected - 1));
size_t …Run Code Online (Sandbox Code Playgroud) 如果我尝试创建case语句变量它给我搭建erroe任何人都可以给我介绍为什么这句法让我生成错误("'NSMutableArray的’前预期的表达").
我不知道为什么会这样.它对我来说是正确的.我写了另一个UIAlertView,它看起来很好,一旦我删除了它,它就错误地写了我写的那个.我正在尝试按照本教程.
这是在我的viewcontroller.m中
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result) {
case MessageComposeResultCancelled:
NSLog(@"Cancelled");
break;
case MessageComposeResultFailed:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome To My App" message:@"This app will ... First you need to ..." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
break;
case MessageComposeResultSent:
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
错误显示在它的许多行上,例如:在消息发送表达式的开头缺少"[".(如果我把它放在它想要在initWithTitle之后放另一个和另一个和另一个:)
下一个错误是:使用未声明的标识符'alert'(在show和release中说明)
知道发生了什么事吗?提前致谢.
我有以下代码
NSString * myStr = [[NSString alloc] initWithFormat:@""];
Run Code Online (Sandbox Code Playgroud)
但在Xcode中,我有一个带有"预期表达式"的红色感叹号.
我解决了以下问题:
[NSString stringWithFormat:@"Number is not from 1 to 6. randomNumber is %d", randomNumber]
Run Code Online (Sandbox Code Playgroud)
但我想知道问题是什么.
图片
http://imgur.com/iICMhYc&S7QwhFT#1
谢谢