我正在使用虚拟类进行分配,我需要实现一个纯虚拟方法,该方法稍后将在继承的类中实现。
我以前使用完美的虚拟方法解决了一个问题,该方法可以完美地工作,自己解决了我现在收到的错误(错误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;
}
我希望从播放列表类实例化一个对象。
答案 0 :(得分:1)
类Playlist中的Record类型的成员'p'被隐式声明为private。要进行访问,您需要添加公共成员函数(例如,将数据存储到记录中)。
答案 1 :(得分:0)
您不能直接实例化Playlist
,因为它是抽象的,因此在main
中,而不是:
Playlist x(n);
您需要
PlaylistImplementation x(n);
您需要像这样的PlaylistImplementation
中的构造函数:
PlaylistImplementation (int n) : PlayList (n) { }