ошибка необъявленного идентификатора возникает, когда я уже объявил переменную - PullRequest
0 голосов
/ 15 ноября 2009

Я получил необъявленную ошибку идентификатора из следующего кода, но я четко объявил переменную "длина" в обоих случаях что я сделал не так?

int startWordLenRec(char s[]) {
    if (isLetter(s) == false){
        int length = 0;
    }
    else if{
        int length = 1 + startWordLenRec(s+1);
    }
    return length;
}

Ответы [ 6 ]

4 голосов
/ 15 ноября 2009

Объявление является локальным по отношению к области, в которой вы его объявляете. Поэтому, если вы объявляете его внутри {}, его нельзя использовать после закрытия }.

int startWordLenRec(char s[]) {
    int length;
    if (isLetter(s) == false){
        length = 0;
    }
    else if{
        length = 1 + startWordLenRec(s+1);
    }
    return length;
}

Конечно, вы также можете return 0; напрямую, без отдельной переменной.

4 голосов
/ 15 ноября 2009

Вы объявили две переменные в двух разных блоках, но затем попытались использовать их вне этих блоков. Вместо этого вы хотите объявить одну переменную и присвоить ей значение в каждом из блоков:

int startWordLenRec(char s[]) {
    int length;
    if (isLetter(s) == false){
        length = 0;
    }
    else {
        length = 1 + startWordLenRec(s+1);
    }
    return length;
}

(Я удалил постороннее «если» после «еще».)

Однако условное выражение будет более понятным (IMO):

int startWordLenRec(char s[]) {
    return isLetter(s) ? 1 + startWordLenRec(s+1) : 0;
}
1 голос
/ 15 ноября 2009

length должен быть объявлен сверху, так как он используется в обеих ветвях if и outside (в операторе return).

1 голос
/ 15 ноября 2009

Объявляйте длину вне операторов if.

1 голос
/ 15 ноября 2009

Переместить объявление длины за пределы оператора if. То, как ваш текущий объявил это, перестает завершаться после выполнения оператора if, поэтому возвращаемая длина всегда не объявлена ​​

0 голосов
/ 15 ноября 2009

Вы объявили переменную "length" внутри первого и второго операторов if. Таким образом, снаружи не видно, если заявления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...