【问题标题】:Defining Scope in C++ OOP Program在 C++ OOP 程序中定义范围
【发布时间】:2019-03-29 23:04:24
【问题描述】:

我正在尝试通过创建一个管理员工的程序来挑战自己,从而在 C++ 方面做得更好。给定一定的薪水与销售额,你要么被雇用,要么被解雇,要么保住你的工作。我最近一直在使用 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”是 未在此范围内声明 if (sales

【问题讨论】:

  • 能否请您提供您得到的确切错误信息?
  • 1) "我仍然收到错误,名称、薪水和范围(我的变量)未在我的程序范围内定义。" 请复制粘贴错误消息,而不是解释它。 2) 请提供minimal reproducible example
  • namesalaryscope 声明在哪里?它们未在此代码中声明。 (您没有使用任何称为“范围”的东西。您的意思是“销售”吗?)
  • 抱歉,我是 StackOverflow 的新手,它只让我包含主文件。让我添加其余的。
  • @JordanBrandes 这些是成员变量。您一直在为它们分配值,并且检查它们的值看起来完全相同:Boss1.sales &lt;= Boss1.salary。也许是时候使用good book了?

标签: c++ oop


【解决方案1】:

由于错误试图告诉您在main 中没有声明salessalary。你可能想参考Employees salessalary,那就是

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

更多提示:

  • 最好使用小写字母作为对象名称和大写字母作为类型。在您的代码中,很难看出什么是变量,什么是类型。
  • 每当您发现自己命名变量foo1foo2foo3 等时,您应该使用std::vector 或数组来代替。这将帮助您了解所有员工并评估他们的销售额/薪水。
  • ifelse{} 是可选的,但通常最好以任何方式编写它们。
  • 您的两个案例不是唯一的。如果sales == salary 则两个条件都为真,但只有第一个条件会被评估。因此有一个小小的困惑:查看else 条件,您可能会认为sales == salary 的员工做得很好,但他们会被解雇:(
  • 最后一点,即使收入为零,也能保住员工的公司是一家非常好的公司 :)

PS:

我希望以一种更一般的方式来做,而我不必这样做 每次都写出Boss1,Boss2,Boss3,但看起来就是这样 最好的方法

当您发现自己编写的代码块包含大量 Boss1.some_member 时,那么该代码块非常适合在成员函数中实际实现(您不需要为对象添加前缀)。例如,员工可能有一个bool Employee::evaluate_salary_vs_sales();,其中包含您现在在 main 中拥有的逻辑,并返回他们是否被解雇。

【讨论】:

  • 非常感谢您的帮助。正如我所说,我是新手,我得到的指导越多,我将来就会越好。以后我会修改我的代码。
  • @JordanBrandes 很乐意为您提供帮助,尽管您应该对我写的内容持保留态度,所以这不是辅导的最佳场所,我的回答是大量挥手。为了正确学习,没有办法获得book
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多