Компилятор C++ анализирует файл кода последовательно по порядку. то есть строка 1, затем строка 2, затем строка 3... и так далее. Таким образом, к тому времени, когда компилятор дойдет до оператора вызова функции pow(e, b);
в вашей функции main()
, он еще не достиг определения функции void pow(int e, int b)
ниже функции main()
и поэтому выдает ошибку. Есть два способа решить эту проблему.
1) Переместите определение void pow(int e, int b)
(и любой другой функции, которую вы планируете вызывать из main()
) над самой функцией main()
. Таким образом, компилятор уже проанализировал вашу функцию и узнает о ней до того, как она достигнет строки pow(e, b);
в вашем main()
.
2) Другой способ - использовать предварительное объявление. Это означает добавление строки void pow(int e, int b);
перед функцией main()
. Это сообщает компилятору, что функция, указанная в предварительном объявлении (в данном случае void pow(int e, int b)
), определена в этом файле кода, но может быть вызвана перед кодом определения функции в файле. Это лучший метод, так как в вашем файле может быть несколько функций, вызывающих друг друга в разном порядке, и может быть непросто переупорядочить их определения, чтобы они отображались до того, как они будут вызваны в файле. Вот хорошее чтение по Forward Declaration
Вы также можете передать параметры по ссылке на вашу функцию, чтобы получить правильный результат. т. е. используйте void pow(int& e, int& b)
. Это приведет к тому, что значения, измененные в вашей функции pow()
, будут фактически применены к целым числам e
и b
, а не только к их копиям, которые будут удалены после завершения выполнения pow()
. Эта ссылка о передаче аргументов по ссылке в функциях довольно хорошо объясняет это.
person
Chinmay Nerurkar
schedule
13.06.2012
pow()
вышеmain()
или объявите функцию передmain()
, чтобыmain()
знал, что такоеpow()
. - person Alok Save   schedule 13.06.2012pow
не имеет возвращаемых или выходных аргументов и, по-видимому, не имеет побочных эффектов, поэтому любой приличный компилятор должен в любом случае оптимизировать ее ... возможно, вы хотели иметьe
выходной аргумент, а затем объявитьpow(int&e, int b)
... и вы не должны назовите это pow, что предполагает, что он вычисляет мощность, которой он не... - person Walter   schedule 13.06.2012