Исключения в C ++ - PullRequest
       1

Исключения в C ++

0 голосов
/ 07 марта 2020

Итак, у меня есть код в Java, теперь я хочу это в C ++. Все хорошо, но у меня проблемы с исключениями.

В классе 'Test' в Java У меня есть

try {
    k = Integer.parseInt(args[i]);
}
catch (OutOfRangeException ex) {
    System.out.println(args[i]+ ex.getMessage());               
}

Это 'OutOfRange. java'

public class OutOfRangeException extends Exception {
    public OutOfRangeException (String message) {
        super (message);
    }
}

И метод из другого класса который выдает это исключение

public int number (int m) throws OutOfRangeException {
        if (m < 0 || m >= arr.length) {
            throw new OutOfRangeException(" - number out of range");
        }
        return arr[m];
    }
};

Я не могу получить тот же эффект с C ++, я много читал об этом, но все же он не работает (я получаю 'dynamici c спецификации исключений в устаревшем C ++ 11 ', когда дело доходит до' throw ', но я также не знаю, как получить сообщение в C ++).

Есть ли способ, которым я могу сделать это, как в Java?

Я пробовал что-то вроде этого: В основном:

try {
    k = stoi(argv[i]);
}
catch (OutOfRangeException &e) {
    cout << argv[i]<< endl;
}

Метод:

int PrimeNumbers: number (int m) throw (OutOfRangeException) {
    if (m < 0 || m >= sizeof(arr)) {
        throw  OutOfRangeException(" - number out of range");
    }
    return arr[m];
}

и конструктор OutOfRangeException

OutOfRangeException::OutOfRangeException(string message) {
    cout<<message;
}

Дело в том, что я получаю эту ошибку «dynamici c exception ...», и я не нашел другого способа сделать это, поэтому я бы будь доволен этим.

1 Ответ

1 голос
/ 07 марта 2020

Dynami c спецификации исключений, такие как

throw (OutOfRangeException)

в объявлении функции, устарели с C ++ 11 и были удалены из C ++ с C ++ 17. Функции в современном C ++ имеют только две спецификации исключений: либо может генерировать , либо не может генерировать . По умолчанию это первое, поэтому вам вообще не нужна эта спецификация.


int PrimeNumbers: number (int m) не имеет смысла, вы имели в виду int PrimeNumbers::number (int m)?


sizeof(arr) не делает то, что вы думаете, что делает. Возвращает размер объекта в байтах. Я не знаю, как объявляется arr, но это почти наверняка неправильно.


std::stoi выдает исключение std::out_of_range, если проанализированное значение не соответствует типу. Он никогда не выбрасывает ваш пользовательский тип OutOfRangeException.

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