Syntax &引用;对于每一个“;C++/CLI array^ints=gcnewarray{0,1,2,3,4,5,6,7,8,9}; 对于每个(整数中的整数i) 如果(i%2==0) 调试::WriteLine(“偶数”\n); 其他的 调试::WriteLine(“奇\n”);

Syntax &引用;对于每一个“;C++/CLI array^ints=gcnewarray{0,1,2,3,4,5,6,7,8,9}; 对于每个(整数中的整数i) 如果(i%2==0) 调试::WriteLine(“偶数”\n); 其他的 调试::WriteLine(“奇\n”);,syntax,c++-cli,Syntax,C++ Cli,为什么上面的内容无法编译?如果我对(int I;…)使用,或者如果我将if else括在大括号内,则效果很好。我知道手册明确指出需要大括号,但我想知道为什么会出现这种偏离预期的行为?我不是CLI导出,但我相信for each(I in ints)是您所追求的 编辑 我检查了我有的C++源,我们使用的是: array<int> ^ints = gcnew array<int>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for each(int i i

为什么上面的内容无法编译?如果我对(int I;…)使用
,或者如果我将
if else
括在大括号内,则效果很好。我知道手册明确指出需要大括号,但我想知道为什么会出现这种偏离预期的行为?

我不是CLI导出,但我相信
for each(I in ints)
是您所追求的

编辑

我检查了我有的C++源,我们使用的是:

array<int> ^ints = gcnew array<int>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for each(int i in ints)
    if(i % 2 == 0)
        Debug::WriteLine("Even\n");
    else
        Debug::WriteLine("Odd\n");
是否可能需要支架?我手头没有MSFT编译器,或者我会尝试以下方法:

for each (int i in ints) {
   // body
}

我找不到任何官方文件,但我可以证实你看到的行为。显然,编译器在为每个
查找
后面的单个语句时过于激进,以至于将
else
if
中分离出来。它编译它就像您编写了以下内容一样,这显然是不正确的

for each (int i in ints) {
    if(i % 2 == 0) {
        Debug::WriteLine("Even\n");
    } else {
        Debug::WriteLine("Odd\n");
    }
}
array^ints=gcnewarray{0,1,2,3,4,5,6,7,8,9};
对于每个(整数中的整数i)
{
如果(i%2==0)
调试::WriteLine(“偶数”\n);
}
其他的
调试::WriteLine(“奇\n”);

<>这和>循环行为的规则C++ >代码明显不同,所以您可能希望在.

yUP中出现一个bug。很抱歉我太习惯其他语言了。事实上,不,它没有引入另一个语法错误-它在这里使用VS2008编译对我来说很好。在您尝试之前,代码可能已编辑为正确的:)
array<int> ^ints = gcnew array<int>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for each(int i in ints)
{
    if(i % 2 == 0)
        Debug::WriteLine("Even\n");
}
else
    Debug::WriteLine("Odd\n");