Оператор char* i2txt(int);
объявляет функцию i2txt
, которая принимает int
в качестве ввода и возвращает char*
.
Что такое форвард-декларация?
Если у вас есть функция, использованная до ее объявления, это приводит к ошибке:
#include <iostream>
int main() {
foo(); // Error: foo not defined
}
void foo() {
std::cout << "Hello, world!";
}
Форвард-объявление в основном заявляет: «Эта функция еще не определена, но я обещаю, что определю ее в конце концов. В приведенном выше примере это выглядело бы так:
#include <iostream>
void foo(); // Forward declaration
int main() {
foo(); // Now we can use it
}
void foo() {
std::cout << "Hello, world!";
}
Почему вы получаете ошибку, когда вы изменяете ее на i2txt(float);
?
Это приводит к ошибке, потому что внезапно нет функции i2txt(int)
для вызова. Поскольку int
s может быть неявно преобразовано в float
, компилятор все еще позволяет другим функциям вызывать i2txt(float)
, но определение для i2txt(float)
не предоставляется, поэтому существует ошибка компоновщика:
#include <iostream>
char* i2txt(float);
int main() {
std::cout << i2txt(10); // Tries calling i2txt(float)
}
// This provides a definition for i2txt(int), but the linker is still missing a definition for i2txt(float)
char* i2txt(int) {
// ... stuff
}