标识符 "numIDs" 在范围内时未定义

identifier "numIDs" is undefined while inside of scope

我正在编写一个小应用程序,它应该从文本文件中获取一串数字,然后将它们保存到一个数组中,最后通过迭代打印该数组,该文件应采用以下格式:

10 0 1 2 3 4 5 6 7 8 9

第一个数字是数组中应包含的数字或“ID”的数量,其余数字是数组中的元素。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    ifstream test;
    test.open("test.txt");
    string s;
    getline(test, s);
    int numtest = s[0];
    for (int  i = 0; i < numtest; i++) {
        string currLine;
        getline(test, currLine);
        int numIDs = currLine[0];
        int arrayIDs[numIDs];
        for (int j = 2, k = 0; j < numIDs; j += 2, k++) {
            arrayIDs[k] = currLine[j];
        }
    }
    test.close();
    for (int i = 0; i <= numIDs; i++) {
        cout << arrayIDs[i];
    }
}

但是,我得到了错误

identifier "numIDs" is undefined

identifier "arrayIDs" is undefined

分别在第 22 行和第 23 行,虽然我不知道为什么,但据我了解,因为这 2 个是变量,所以 #include 应该没有任何问题,并且都在 main() 函数中,所以我不明白为什么它们会是未定义的。

放置在循环内的变量在循环外是不可见的。因此,要解决您的问题,请在循环外而不是在循环内声明 numIDs。此外,从外观上看,您可能希望将第二个循环放在第一个循环中。 原文:

int numtest = s[0];
for (int  i = 0; i < numtest; i++) {
    string currLine;
    getline(test, currLine);
    int numIDs = currLine[0];
    int arrayIDs[numIDs];
    for (int j = 2, k = 0; j < numIDs; j += 2, k++) {
        arrayIDs[k] = currLine[j];
    }
}

修订:

int numtest = s[0];
int numIDs = 0;
for (int  i = 0; i < numtest; i++) {
    string currLine;
    getline(test, currLine);
    numIDs = currLine[0];
    int arrayIDs[numIDs];
    for (int j = 2, k = 0; j < numIDs; j += 2, k++) {
        arrayIDs[k] = currLine[j];
    }
    for (int i = 0; i <= numIDs; i++) {
        cout << arrayIDs[i] << ' ';
    }
}