我是C ++的新手。我一直试图克服这个错误。我知道派生类中的类继承自基类的所有内容,但是如果派生类具有其他数据成员怎么办?构造函数应该如何?

当我尝试仅放置新的变量时,我尝试将参数传递给构造函数中新创建的类成员,但我收到一条错误消息,说它与基类的参数不匹配。当我尝试使用基类的那个并添加新的数据成员时,它告诉我我正在重新定义。因此,我想知道如何克服下面的错误才是我的代码。

这是基类:

class movielibrarybase
{


public:
        movielibrarybase(string name, string dirname, string gen, int price);

        void setname(string name);
        string getname();

        void setdirector_name(string dirname);
        string getdirector_name();

        void setgenre(string gen);
        string getgenre();


        void setprice(int price);
        int getprice();

        void display();

        ~movielibrarybase();

    protected:
    string name;
    string director_name;
    string genre;
    int price;
};


这是派生类:

class songlibrary: public movielibrarybase
{
    public:
        songlibrary();


        void setartist_name(string name);
        string getartist_name();



        void setsong_position(string position);
        string getsong_position;

        ~songlibrary();


    protected:

    string artist_name;
    string song_postion;
};


我收到以下错误:

songlibrary.cpp ||在构造函数中“ songlibrary :: songlibrary(std :: string,std :: string,std :: string,int,std :: string,std :: string)':|
songlibrary.cpp | 6 |错误:没有匹配函数调用'movielibrarybase :: movielibrarybase()'|
movielibrarybase.cpp | 3 |注:候选者为:movielibrarybase :: movielibrarybase(std :: string,std :: string,std :: string,int)|
movielibrarybase.h | 8 |注:movielibrarybase :: movielibrarybase(const movielibrarybase&)|
songlibrary.cpp | 34 |错误:没有在类'songlibrary'中声明的'std :: string songlibrary :: getsong_position()'成员函数

最佳答案

在您的情况下,它将类似于:

songlibrary::songlibrary( string n, string director, string gen,
                          int pri, string artist, string song )

                     : movielibrarybase( n, director, gen, pri ),
                       artist_name( artist ), song_postion( song )


这里要注意的一件事是成员初始化程序列表中的顺序很重要。首先应调用基类,然后应按照在类中声明它们的顺序初始化派生类成员。

同样,类成员按其在类中的声明顺序进行初始化,它们在成员初始化列表中的排列顺序无异

10-08 09:17