c ++ идентификатор ошибки не найден для функции? - PullRequest
0 голосов
/ 11 октября 2018

это мои первые шаги в C ++, и я пытаюсь запустить функцию, которую мне нужно использовать

, но я получаю эту ошибку:

Код серьезности Описание Файл проектаОшибка состояния подавления строки C3861 'findAndRotateBlankNumbers': идентификатор не найден ConsoleApplication2 c: \ users \ source \ repos \ consoleapplication2 \ consoleapplication2 \ consoleapplication2.cpp 29

, а это код:

// ConsoleApplication2.cpp: Определяет точку входа для консольного приложения.//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

enum States {
    needBlank,
    needNumber,
    collectNumbers,
};

bool finish = false;
int i = 0;

int main()

{


    char data[] = { "they're 2fast 96 345 6789 a11 24x 2424" };


    printf(data);
    findAndRotateBlankNumbers(data);
    printf(data);

    system("pause");





    return 0;
}


void findAndRotateBlankNumbers(char* ptr) {
    char* first;
    char* last;
    for (uint8_t state = needBlank; *ptr; ptr++) {
        switch (state) {
        case needBlank:
            if (*ptr == ' ') {
                state = needNumber;
            }
            break;
        case needNumber:
            if (isdigit(*ptr)) {
                state = collectNumbers;
                first = ptr;
            }
            else if (*ptr != ' ') {
                state = needBlank;
            }
            break;
        case collectNumbers:
        {
            bool swap = false;
            if (!isdigit(*ptr)) {
                last = ptr - 1;
                state = (*ptr == ' ' ? needNumber : needBlank);
                swap = true;
            }
            else if (!ptr[1]) {
                last = ptr;
                swap = true;
            }
            if (swap) {
                if (last != first) {
                    for (int8_t nums = (last - first + 1) / 2; nums--; ) {
                        char swap = *first;
                        *first++ = *last;
                        *last-- = swap;
                    }
                }
            }
            break;
        }
        }
    }

}

что это?


Я изменил порядок кода, как вы предложили:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

enum States {
    needBlank,
    needNumber,
    collectNumbers,
};

bool finish = false;
int i = 0;

void findAndRotateBlankNumbers(char* ptr) {
    char* first;
    char* last;
    for (uint8_t state = needBlank; *ptr; ptr++) {
        switch (state) {
        case needBlank:
            if (*ptr == ' ') {
                state = needNumber;
            }
            break;
        case needNumber:
            if (isdigit(*ptr)) {
                state = collectNumbers;
                first = ptr;
            }
            else if (*ptr != ' ') {
                state = needBlank;
            }
            break;
        case collectNumbers:
        {
            bool swap = false;
            if (!isdigit(*ptr)) {
                last = ptr - 1;
                state = (*ptr == ' ' ? needNumber : needBlank);
                swap = true;
            }
            else if (!ptr[1]) {
                last = ptr;
                swap = true;
            }
            if (swap) {
                if (last != first) {
                    for (int8_t nums = (last - first + 1) / 2; nums--; ) {
                        char swap = *first;
                        *first++ = *last;
                        *last-- = swap;
                    }
                }
            }
            break;
        }
        }
    }

}

int main()

{


    char data[] = { "they're 2fast 96 345 6789 a11 24x 2424" };


    printf(data);
    findAndRotateBlankNumbers(data);
    printf(data);

    system("pause");





    return 0;
}

но теперь я получаюдругие ошибки:

Код серьезности Описание Ошибка состояния строки файла проекта C4703 потенциально неинициализированная локальная переменная-указатель 'первый' использованный ConsoleApplication2 c: \ users \ source \ repos \ consoleapplication2 \ consoleapplication2 \ consoleapplication2.cpp 52

?

1 Ответ

0 голосов
/ 11 октября 2018

Ваша функция findAndRotateBlankNumbers определена после , которую вы хотите вызвать в main.Таким образом, компилятор не знает, что эта функция еще существует при компиляции основной функции.Чтобы это исправить, вы можете либо

  • переместить функцию findAndRotateBlankNumbers выше main
  • , добавить объявление функции вверху и оставить определение там, где оноis: void findAndRotateBlankNumbers(char* ptr);

По поводу вашей второй ошибки:

Компилятор жалуется, что вы объявляете переменную first без присвоения ей значения при инициализации.Вы должны дать ему разумное значение по умолчанию, например char* first = nullptr;

То же самое с char* last = nullptr;

Если ваш компилятор не поддерживает nullptr, используйте NULL вместо;

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