Прямо из спецификаций API для ClassCastException
:
Брошено, чтобы указать, что код попытался передать объект подклассу, из которого он не экземпляр.
Так, например, когда вы пытаетесь передать
Integer
вString
,String
не является подклассомInteger
, поэтому aClassCastException
.Object i = Integer.valueOf(42); String s = (String)i; // ClassCastException thrown here.
Ошибки компоновщика обычно возникают, когда компилятор не может найти определения функций, используемые в программе. Возможно, вы не компилируете другие исходные файлы. Если определение функций:
int getChoice();
int getNumbers(int numbers[], int eSize);
void displayAllNumbers(int array[], int eSize);
void displayAverage(int numbers[], int eSize);
void showSum(int numbers[], int eSize);
находятся в другом файле, скажем, functions.c
и main.c
содержит функцию main()
, то вам придется скомпилировать их как clang main.c functions.c <other options> -o <output file>
Исходный файл, который вы показали, содержит только определение main()
. Другие вспомогательные функции, такие как getChoice()
и т. Д., Только что объявлены, а определение отсутствует в текущем файле. Если определения для этих вспомогательных функций находятся в других файлах, их также следует скомпилировать.
Если предположить, что main()
включено в main.c
, а вспомогательные функции находятся в helper.c
, то команда для их компиляции в gcc будет
gcc main.c helper.c -o executive_name
. Лучший способ справиться с этим поместить все прототипы функций (или объявления) в файл заголовка, скажем, helper.h
, и включить вспомогательный файл как в main.c
, так и в helper.c