C ++ идентификатор не определен - PullRequest
2 голосов
/ 03 октября 2019

Я новичок в C ++. Я не понимаю, почему я получаю эту ошибку. Из 5 утверждений, которые похожи на ошибку 3 отметки, но два других в порядке. Ошибка в основной функции.

    #include <iostream>
using namespace std;

// Function declaration
void getGallons(int wall);
void getHours(int gallons);
void getCostpaint(int gallons, int pricePaint);
void getLaborcharges(int hours);
void getTotalcost(int costPaint, int laborCharges);

// Function definition
void getGallons(int wall)
{
    int gallons;

    gallons = wall / 112;

    cout << "Number of gallons of paint required: " << gallons << endl;


}

// Function definition
void getHours(int gallons)
{
    int hours;

    hours = gallons * 8;

    cout << "Hours of labor required: " << hours << endl;


}

// Function definition
void getCostpaint(int gallons, int pricePaint)
{
    int costPaint;

    costPaint = gallons * pricePaint;

    cout << "The cost of paint: " << costPaint << endl;
}

// Function definition
void getLaborcharges(int hours)
{
    int laborCharges;

    laborCharges = hours * 35;

    cout << "The labor charge: " << laborCharges << endl;
}

// Funtion definition
void getTotalcost(int costPaint, int laborCharges)
{
    int totalCost;

    totalCost = costPaint + laborCharges;

    cout << "The total cost of the job: " << totalCost << endl;
}

// The main method
int main()
{
    int wall;
    int pricePaint;

    cout << "Enter square feet of wall: ";
    cin >> wall;

    cout << "Enter price of paint per gallon: ";
    cin >> pricePaint;

    getGallons(wall);

    getHours(gallons); // error here

    getCostpaint(gallons, pricePaint);

    getLaborcharges(hours); // error here

    getTotalcost(costPaint, laborCharges); //error here

    return 0;

}

Этот урок был сосредоточен на использовании функций и передаче параметров в коде. Я не должен использовать глобальные переменные. Если у вас есть лучший способ сделать это, пожалуйста, поделитесь.

Ответы [ 2 ]

7 голосов
/ 03 октября 2019

Сокращение до трех строк (другие ошибки аналогичны):

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() { };

Если вы все еще хотите сохранить объявления, это скорее вопрос стиля (но он станет важным при управлении кодом в разных блоках компиляции, так как тогда вы будете иметь объявления вфайлы заголовков - вы скоро встретитесь на следующих уроках).

1 голос
/ 03 октября 2019

Причина в том, что переменные не определены до их использования. Следующие изменения добавлены в код.

  • , поскольку вы назвали функции как "getSomeValue ()", лучше использовать возвращаемый тип вместо void.
  • лучше использовать double вместо int, потому что в вычислениях есть деления
  • также использует вызовы вложенных функций для уменьшения количества строк кода.

Фиксированный код:

#include <iostream>
using namespace std;

// Function declaration
int getGallons(int wall);
int getHours(int gallons);
int getCostpaint(int gallons, int pricePaint);
int getLaborcharges(int hours);
int getTotalcost(int costPaint, int laborCharges);

// Function definition
int getGallons(int wall)
{
    int gallons;

    gallons = wall / 112;

    cout << "Number of gallons of paint required: " << gallons << endl;
    return gallons;
}

// Function definition
int getHours(int gallons)
{
    int hours;

    hours = gallons * 8;

    cout << "Hours of labor required: " << hours << endl;
    return hours;
}

// Function definition
int getCostpaint(int gallons, int pricePaint)
{
    int costPaint;

    costPaint = gallons * pricePaint;

    cout << "The cost of paint: " << costPaint << endl;
    return costPaint;
}

// Function definition
int getLaborcharges(int hours)
{
    int laborCharges;

    laborCharges = hours * 35;

    cout << "The labor charge: " << laborCharges << endl;
    return laborCharges;
}

// Funtion definition
int getTotalcost(int costPaint, int laborCharges)
{
    int totalCost;

    totalCost = costPaint + laborCharges;

    cout << "The total cost of the job: " << totalCost << endl;
    return totalCost;
}

// The main method
int main()
{
    int wall;
    int pricePaint;

    cout << "Enter square feet of wall: ";
    cin >> wall;

    cout << "Enter price of paint per gallon: ";
    cin >> pricePaint;

    int costPaint = getCostpaint(getGallons(wall), pricePaint);
    int laborCharges = getLaborcharges(getHours(getGallons(wall)));
    getTotalcost(costPaint, laborCharges);

    return 0;

}
...