【问题标题】:C++ unable cout salary from methodC ++无法从方法中计算薪水
【发布时间】:2021-12-27 11:56:36
【问题描述】:

入口点是 int main() 所以我尝试调用 pwr.GetSalary 来计算外部字符串“Salary”和双倍值,但是程序不打印任何内容。 所以它是基类。

class Employee
{
    public:
        std::string FirstName;
        std::string LastName;
        std::string Patronymic;
        double Salary;
        Employee() {};
        explicit Employee(std::string FirstName, std::string LastName,
            std::string Patronymic, double Salary)
            : FirstName(FirstName), LastName(LastName),
            Patronymic(Patronymic), Salary(Salary) {}
        bool operator==(Employee other) const
        {
            if (this->FirstName == other.FirstName && 
                this->LastName == other.LastName && 
                this->Patronymic == other.Patronymic) 
                return true;
            else 
                return false;
        }
};

继承基类的子类...这是计算工资并打印出来的绝妙方法...

class Papersworker : public Employee
{
    private:
        std::string FirstName;
        std::string LastName;
        std::string Patronymic;
        double Salary;
    public:
        Papersworker() {};
        using Employee::Employee;
        const std::string Job = "Papersworker";
        std::map<std::string, double> Coefficient = 
        {
            {"Director", 4.2},
            {"Papersworker", 1.2},
            {"Guardian", 1.5},
            {"Programmer", 2.5}
        };
        void ChangeCoefficient(std::string Job, double NewCoefficient)
        {
            Coefficient[Job] = NewCoefficient;
        }
        void ChangeNameSalary(std::string FirstName, std::string LastName, std::string Patronymic, double Salary)
        {
            this->FirstName = FirstName;
            this->LastName = LastName;
            this->Patronymic = Patronymic;
            this->Salary = Salary;
        }
        void PrintPapersworker()
        {
            std::cout << "First name\t" << "Lastname\t" << "Patronymic\t" << "Salary\n" << this->FirstName << "\t\t" << this->LastName << "\t" << this->Patronymic << "\t" << this->Salary << "\n" << std::flush;
            for (const auto& i : this->Coefficient)
            {
                std::cout << i.first << " = " << i.second << ";\t" << std::flush;
            }
            std::cout << "\n------------------------------------------------------------\n" << std::flush;
        }
        double GetSalary(double Salary, std::string Job)
        {
            return Salary * this->Coefficient[Job];
        }
};

精彩的 int main() 部分。

int main()
{
   Papersworker pwr;
   double sr = 0.0;
   std::cout << "\nEnter director's salary\t" << std::flush; std::cin >> sr;
   std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Director");
   return 0;
}

如果您看到一些不好的并需要优化,请不要介意回复。 ._.我不明白在课程建设技巧方面发生了什么。 https://pastebin.com/p7HXaX80 P.S. 我的作业强制使用私人 FirstName,LastName,Patronymic,salary... P.S.S. 但是,我现在使用带有最新 C++ 的 Visual Studio 2022 Preview。 https://imgur.com/a/N8cDK3n

【问题讨论】:

  • @AlanBirtles 我尽力了。我能做些什么来解决问题?我能做的最好的事情是使用 pastebin.com 复制粘贴我的错误代码。 pastebin.com/p7HXaX80
  • 您可能使用的是旧版本的 Visual Studio,您需要在 main 的末尾设置断点以避免在程序完成时关闭控制台窗口。不过,这是众多可能性之一,因为我不确定您在运行程序时观察到了什么。和 Alan 一样,它会在我运行时打印薪水。
  • 我希望我用的是旧的软件,但它是最新的... @chris

标签: c++ visual-c++


【解决方案1】:

程序不打印任何东西

如果您将_getch() 更改为getch(),您的程序(您提供的pastebin 链接)编译成功并连续打印,如here 所示。但由于某种原因,它会永远持续下去。由于您提供的链接有大约 500 行代码,我没有看一下为什么条件没有破坏(或者程序是否有任何未定义的行为)。也许您可以缩小问题范围并再次编辑您的问题。

【讨论】:

  • 好吧,你真的想出了一个窍门。干得好先生。我要买新电脑吗?
  • 哈哈,不客气。
【解决方案2】:

您的代码将无法编译,因为 sr 变量未定义。
在 main() 的语句 std::cin &gt;&gt; sr; 中使用之前定义 double sr; 并且(至少)程序将编译并与用户交互。

int main() {
  Papersworker pwr;
  std::cout << "\nEnter director's salary\t" << std::flush;
  double sr; // <- your missed variable
  std::cin >> sr;
  std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Director");
}

输入 10 的程序打印:

Enter director's salary 10

Salary  42

【讨论】:

  • 很遗憾,我把 pastebin.com 留在了下面。它已经定义了。
  • @Lith 您的问题中的 sn-p 正在工作。可能你的IDE有问题。您可以尝试使用命令行编译它。
【解决方案3】:

Papersworker 的所有私有成员都会影响 Employee 的公共成员

class Papersworker : public Employee {
 private:
  std::string FirstName;
  std::string LastName;
  std::string Patronymic;
  double Salary;
// ...
};

试试这个:Compiler Explorer(未测试,因为我现在很着急,等我回来看看)

另外,be carefulstd::map::operator []

【讨论】:

  • 强制使用这些字段作为私人...由于作业。
  • 我没有时间好好修复它,但我不能就这样,所以我有this
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2021-11-23
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多