使用OpenMP时,for循环在if else语句中的C ++错误

时间:2017-07-21 02:26:21

标签: c++ visual-studio openmp

当我在visual studio 2015中运行以下代码时,我收到错误" else"声明"期待声明"。由于我已经指定了并行区域,因此我无法弄清楚为什么这不起作用。

void test(int a) {
    if (a % 2 == 0) {
        #pragma omp parallel{
        #pragma omp for
        for (int i = 0; i < 10; ++i) {
            cout << i;
        }
        }
    }
    else {
        //#pragma omp parallel for 
        for (int i = 0; i < 10; ++i) {
            cout << i;
        }
    }
}

没有openMP声明,代码运行良好。为什么会发生以及如何解决?非常感谢!

2 个答案:

答案 0 :(得分:1)

你的问题是由额外的}来完成的,这使得if语句中的else语句关闭了,并且编译器不知道如何处理它

void test(int a) 
{
    if (a % 2 == 0) 
    {
        for (int i = 0; i < 10; ++i) {
            cout << i;
        }
        } //here is the extra }!
    }else 
    {
        for (int i = 0; i < 10; ++i) 
        {
            cout << i;
        }
    }
}

这里是没有额外的代码}

void test(int a) 
{
    if (a % 2 == 0) 
    {
        for (int i = 0; i < 10; ++i) {
            cout << i;
        }
    }else 
    {
        for (int i = 0; i < 10; ++i) 
        {
            cout << i;
        }
    }
}

另外我注意到你的格式有点奇怪,它可能有助于你没有注意到额外的}

祝你好运! :)

答案 1 :(得分:0)

我认为问题是你的括号{}

#include<iostream>
using namespace std;

void test(int a)
{
    if (a % 2 == 0)
    {
    #pragma omp parallel
    {
    #pragma omp for
        for (int i = 0; i < 10; ++i)
        {
            cout << i;
        }
    }
    }

else
{
    #pragma omp parallel for
    for (int i = 0; i < 10; ++i)
    {
        cout << i;
    }

 }
}

int main()
{
    test(3);
    return 0;
}

结果:

0123456789Program ended with exit code: 0