变量未在 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 选择语句)
- ...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.
我是 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 选择语句)
- ...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.