在C ++ OOP程序中定义范围

时间:2019-03-29 14:35:02

标签: c++ oop

我正在通过创建一个管理员工的程序来挑战自己,从而努力提高C ++的水平。给定一定的薪水与销售额,您将被雇用,解雇或保留工作。我最近一直在与OOP合作,并认为按班级构造OOP会使练习更容易。我已经一遍又一遍地解决了这个问题,但似乎找不到解决方法。话虽这么说,我将非常感谢我对自己做错的一些见解。请记住,我是C ++和OOP的新手,但是学到的知识越多,以后的发展就会越好。

最初是全部一个文件,然后我将类分为头文件。现在看来运行起来更加顺畅,但仍然出现错误,我的程序范围中未定义名称,薪水和范围(我的变量)。


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:错误:“ sales”为   如果(销售额<=薪水){^ main.cpp:66:16:   错误:如果(销售额<=工资){   ^ main.cpp:67:34:错误:未在此范围内声明“名称”   std :: cout <<“对不起” <<名字<<“您被解雇了”; ^   main.cpp:71:35:错误:在此范围std :: cout中未声明“名称”   <<“干得好” <<名称<<“您将获得奖金”;

1 个答案:

答案 0 :(得分:2)

由于错误试图告诉您,sales中没有声明salary,也没有声明main。您可能想引用Employee的{​​{1}}和sales,那就是

salary

更多提示:

  • 对于对象名称,最好使用小写字母,对于类型,最好使用大写字母。在您的代码中很难看到什么是变量和什么是类型。
  • 每当发现自己为变量if (Employee1.sales <= Employee1.salary) std::cout << "I'm sorry " << name << "you have been fired"; foo1foo2命名时,都应使用foo3或数组。这将帮助您遍历所有员工并评估他们的销售/工资。
  • std::vector{}的{​​{1}}是可选的,但是以任何方式编写它们通常更好。
  • 您的两种情况并非唯一。如果if,则两个条件都成立,但只有第一个条件会被评估。因此,这里有一个很小的混乱:观察else条件,人们可能期望拥有sales == salary的员工做得很好,但是他们会被解雇:(
  • 最后也是最不重要的一点,即使他们产生零收入,也保留其雇员的公司是一个很好的公司:)

PS:

  

我希望以一种更通用的方式做到这一点,而不必   每次写出Boss1,Boss2,Boss3,但看起来像这样   最好的方法

当您发现自己编写的代码块包含大量else时,那么该代码块是在成员函数中实际实现的一个不错的选择(您无需在对象前加上前缀)。例如,员工可能有一个sales == salary,其中包含您现在主要拥有的逻辑,并返回是否被解雇。