变量未在 C++ 的范围错误中声明?

Variable is not declared in the scope error in c++?

我是 c++ 新手!我要使用 for 循环遍历整数,但出现错误

               error: ‘frame’ was not declared in this scope
               auto position_array = (*frame)[i][j];

但是正如您在下面的代码中看到的那样,它已被声明

    auto ds = data_file.open_dataset(argv[1]);
    // auto frame = data_file.read_frame(ds, 0); // inside the loop
    for (int i = 0; i < 3; ++i)
        auto frame  = data_file.read_frame(ds, i);

    for (size_t i = 0; i < nsamples; ++i) {
        for (size_t j = 0; j <= 2; ++j) { // j<=2 assign all columns 
            auto position_array = (*frame)[i][j];
        }
        corr.sample(frame);
    }
    corr.finalise();

如果我使用注释的第二行,它工作正常。但是现在我想遍历 data_file.read_frame(ds, i) 的第二个变量并且错误出现了!我究竟做错了什么?我需要在 for 循环之前声明 int frame = 0; 吗?为简洁起见,我只是 post 有错误的代码,以防有人需要查看完整代码,不客气!!

听起来您需要一个嵌套的 for 循环。使用

for (int i = 0; i < 3; ++i)
{
    auto frame  = data_file.read_frame(ds, i);

    for (size_t j = 0; j < nsamples; ++j) {
        for (size_t k = 0; k <= 2; ++k) { // j<=2 assign all columns 
            auto position_array = (*frame)[i][j];
        }
        corr.sample(frame);
    }
}

让你得到每个frame,然后处理每个帧的每个元素。

这个for循环

for (int i = 0; i < 3; ++i)
    auto frame  = data_file.read_frame(ds, i);

等同于

for (int i = 0; i < 3; ++i)
{
    auto frame  = data_file.read_frame(ds, i);
}

那是for循环的子语句形成了它的一个作用域。在范围之外,变量框架不可见。

此外,变量 frame 在循环的每次迭代中都会重新创建。

来自 C++ 17 标准(9.4 选择语句)

  1. ...The substatement in a selection-statement (each substatement, in the else form of the if statement) implicitly defines a block scope (6.3). If the substatement in a selection-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original substatement.