Определение области действия в программе C ++ ООП - PullRequest
0 голосов
/ 29 марта 2019

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

Первоначально это был всего один файл, затем я разделил классы на файлы заголовков.Кажется, теперь он работает немного плавнее, но я все еще получаю сообщение об ошибке, что имя, зарплата и область (мои переменные) не определены в области действия моей программы.


main.cpp

#include "Boss.h"
#include "Employee.h"
#include "PotentialEmployee.h"
#include <iostream>


using namespace std;


int main ()
{


  Boss Boss1;
  Boss Boss2;
  Boss Boss3;

  Employee Employee1;
  Employee Employee2;
  Employee Employee3;

  PotentialEmployee PotentialEmployee1;
  PotentialEmployee PotentialEmployee2;

  Employee1.name = "Michael";
  Employee2.name = "John";
  Employee3.name = "Lisa";

  Boss1.name = "Luke";
  Boss2.name = "Ben";
  Boss3.name = "Jack";

  PotentialEmployee1.name = "Bill";
  PotentialEmployee2.name = "Fred";

  Employee1.salary = 55000;
  Employee2.salary = 65000;
  Employee3.salary = 75000;

  Boss1.salary = 88000;
  Boss2.salary = 95000;
  Boss3.salary = 88000;

  PotentialEmployee1.salary = 55000;
  PotentialEmployee2.salary = 65000;

  Employee1.sales = 12000;
  Employee2.sales = 40000;
  Employee3.sales = 80000;

  Boss1.sales = 200000;
  Boss2.sales = 250000;
  Boss3.sales = 280000;

  PotentialEmployee1.sales = 55000;
  PotentialEmployee2.sales = 65000;


  if (sales <= salary) 
    std::cout << "I'm sorry " << name << "you have been fired";

  else if (sales >= salary) 

      std::cout << "Good job " << name << "you get a bonus";

   else 
      std::cout << "Try and do better next quarter";


      return 0;
    }

main.cpp: в функции 'int main ()': main.cpp: 66: 7: ошибка: «продажи» не были объявлены в этой области, если (продажи <= зарплата) {^ main.cpp: 66: 16: ошибка: «зарплата» не была объявлена ​​в этой области, если (продажи <= зарплата) {^ main.cpp: 67: 34: ошибка: «имя» не была объявлена ​​в этой областиstd :: cout << "Прости" << имя << "тебя уволили";^ main.cpp: 71: 35: ошибка: «имя» не было объявлено в этой области std :: cout << «Хорошая работа» << имя << «Вы получаете бонус»; </p>

1 Ответ

2 голосов
/ 29 марта 2019

Поскольку ошибка пытается сказать вам, что sales и salary не объявлено в main. Вы, вероятно, хотите сослаться на Employee s sales и salary, это будет

if (Employee1.sales <= Employee1.salary) 
    std::cout << "I'm sorry " << name << "you have been fired";

Еще несколько советов:

  • лучше использовать маленькие начальные буквы для имен объектов и прописные для типов. В вашем коде непросто увидеть, что такое переменная и что такое тип.
  • всякий раз, когда вы обнаруживаете, что называете переменные foo1, foo2, foo3 и т. Д., Вы должны вместо этого использовать std::vector или массив. Это поможет вам обойти всех сотрудников и оценить их продажи / зарплату.
  • {} для if и else являются необязательными, но часто лучше написать их любым способом.
  • ваши два случая не являются исключительными. Если sales == salary, то оба условия будут верными, но будет оцениваться только первое. Отсюда и крошечная путаница: глядя на условие else, можно ожидать, что сотрудник с sales == salary хорошо поработал, но его уволят: (
  • И наконец, очень хорошая компания, которая сохраняет свою занятость, даже если она получает нулевой доход:)

PS:

Я надеялся сделать это в более общем виде, где мне не пришлось бы выписывать Boss1, Boss2, Boss3 каждый раз, но похоже, что это лучший способ сделать это

Когда вы пишете блок кода с большим количеством Boss1.some_member, тогда этот блок кода является хорошим кандидатом для фактической реализации в функции-члене (где вам не нужно добавлять префикс к объекту). Например, у сотрудника может быть bool Employee::evaluate_salary_vs_sales();, который содержит логику, которая у вас теперь есть в main, и возвращает, уволены ли они или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...