Сокращение до трех строк (другие ошибки аналогичны):
int wall;
getGallons(wall);
getHours(gallons); // error here
Пока определено wall
, gallons
- нет. И где вы хотите получить gallons
в любом случае? Результат скрыт глубоко внутри другой функции. Как вы хотите получить его оттуда?
Ну, вам нужно возвращаемое значение:
int getGallons(int wall)
//^^^ !
{
int gallons = wall / 112;
// ...
return gallons; // !
}
Таким образом, вы можете использовать свою функцию следующим образом:
int gallons = getGallons(wall);
// now gallons is defined and you can use it:
getHours(gallons);
Аналогично для других функций и переменных.
Обычно не - хорошая идея смешивать логику (вычисления) и вывод в одной и той же функции. Поэтому я бы предпочел переместить запись в консоль в функцию main
:
int getGallons(int wall) { return wall / 112; }
int getHours(int gallons) { return gallons * 8; }
int wall;
std::cin >> wall;
int gallons = getGallons(int wall);
std::cout << ...;
int hours = getHours(gallons);
std::cout << ...;
Заметьте? Все ввод / вывод теперь находятся на одном уровне ...
Примечание: нет необходимости объявлять функции перед их определением, если вы не используете их до определения:
//void f(); // CAN be ommitted
void f() { };
void g() { f(); }
Контрпример:
void f();
void g() { f(); } // now using f before it is defined, thus you NEED do declare it
void f() { };
Если вы все еще хотите сохранить объявления, это скорее вопрос стиля (но он станет важным при управлении кодом в разных блоках компиляции, так как тогда вы будете иметь объявления вфайлы заголовков - вы скоро встретитесь на следующих уроках).