首页 > 解决方案 > C++ 虚函数传递和工厂函数

问题描述

我正在努力解决家庭作业问题的最后一部分,我遇到了错误

error: passing ‘const string {aka const std::__cxx11::basic_string<char>}’ as ‘this’ argument discards qualifiers [-fpermissive]
    nm = name_str;

有问题的构造函数是

Pilot::Pilot(std::string name_str): Aircrew(nm)
    {
            nm = name_str;

    };

带工厂功能

Aircrew *Aircrew::makeAircrew(char ch, std::string name_str){
            if(ch == 'P')
                    return new Pilot(name_str);

在我的头文件中

class Aircrew
{
public:
    Aircrew(std::string name_str);
    virtual const std::string type(void) const = 0;
    virtual const int maxFlights(void) const = 0;
    const double maxHours(void) const;
    const std::string name(void) const;
    void setFlights(int i);
    void setHours(double h);
    void print(void) const;
    virtual void scheduleFlight(int f, double h) const;
    static Aircrew* makeAircrew(char ch, std::string name_str);
    virtual ~Aircrew(void);
protected:
    const std::string nm;
    int flightsTaken;
    double hoursWorked;
};

class Pilot: public Aircrew
{
public:
    Pilot(std::string name_str);
    virtual const std::string type(void) const;
    virtual const int maxFlights(void) const;
};

现在,根据工厂函数,我正在尝试将名称传递给 const nm 字符串,但我正在努力解决如何做到这一点。我一直在谷歌搜索无济于事。目标是将 name_str 传递给 nm 以便在成员函数名称中我可以做到。

  const string Aircrew::name(void) const{
            return nm;
    }

注意:根据教授,我无法更改头文件中的任何内容。先感谢您!

标签: c++functionclassvirtualfactory

解决方案


推荐阅读