如何修复错误C2259:无法实例化抽象类

时间:2019-05-18 17:56:40

标签: c++ class

我正在使用虚拟类进行分配,我需要实现一个纯虚拟方法,该方法稍后将在继承的类中实现。

我以前使用完美的虚拟方法解决了一个问题,该方法可以完美地工作,自己解决了我现在收到的错误(错误C2259:“播放列表”:无法实例化抽象类)-通过在继承的类中实现方法。

class Record
{
    char* artist;
    char* titlu;
    int durata;

public:
    Record()
    {
        artist = new char[50];
        titlu = new char[50];
        durata = 0;
    }
    void setArtist(char *s)
    {
        strcpy(artist, s);
    }
    char* getArtist()
    {
        return artist;
    }
    void setTitlu(char* s)
    {
        strcpy(titlu, s);
    }
    char* getTitlu()
    {
        return titlu;
    }
    void setDurata(int n)
    {
        int durata = n;

    }
    int getDurata()
    {
        return durata;
    }


};
class Playlist
{
    Record* p; /// "Record" is another class
public:
    Playlist(int n)
    {
        p = new Record[n];
    }
    virtual void sortare(int n) = 0;


};
class PlaylistImplementation :public Playlist
{
public:
    void sortare(int n) 
    {
        if (n == 1)
        {
            cout << "1";
        }
        else if (n == 2)
        {
            cout << "2";
        }
        else
            cout << "3";
    }

};

这是main():

int main()
{
    int n;
    cout << "Number of tracks ?";
    cin >> n;
    Playlist x(n);  /// I use VS 2019 and "x" has a red tilde underneath, 
                         ///  also error is at this line.
    cin.ignore();
    cin.get();
    return 0;
}

我希望从播放列表类实例化一个对象。

2 个答案:

答案 0 :(得分:1)

类Playlist中的Record类型的成员'p'被隐式声明为private。要进行访问,您需要添加公共成员函数(例如,将数据存储到记录中)。

答案 1 :(得分:0)

您不能直接实例化Playlist,因为它是抽象的,因此在main中,而不是:

Playlist x(n);

您需要

PlaylistImplementation x(n);

您需要像这样的PlaylistImplementation中的构造函数:

PlaylistImplementation (int n) : PlayList (n) { }