118行这里,我在参数列表这里传的是string类型的album_name,为什么不行,我对应的构造函数就是string
#include<iostream>
#include<string>
#include<vector>
#include<conio.h>
using namespace std;
class Album;
class Singer;
void shuanghengxian()
{
cout << "========================================================================================" << endl;
}
void bolangxian()
{
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
}
class Album //专辑类
{
public:
string name; //专辑名
Singer* singer; //演唱者
Album(string name, Singer* singer)
{
this->name = name;
this->singer = singer;
}
};
class Singer //歌手类
{
public:
string name; //姓名
//vector<string>songs; //所有歌曲名
Singer(string name)
{
this->name = name;
}
};
class Song //歌曲类
{
public:
string name; //歌名
Album* album; //专辑
Singer* singer; //演唱者
Song(string name, Album* album)
{
this->name = name;
this->album = album;
this->singer = album->singer;
}
void viewSingerProfile(); //查看歌手资料
void viewAlbumProfile(); //查看专辑资料
};
void Song::viewAlbumProfile()
{
cout << "专辑名:" << this->album->name << endl;
}
void Song::viewSingerProfile()
{
cout << "歌手名:" << this->singer->name << endl;
}
class Player //播放器类
{
public:
vector<Song>* list; //播放列表
int mode; //播放模式
Player()
{
}
Player(vector<Song>* list)
{
this->list = list;
//showList();
}
void showList(); //显示播放列表
void chooseOperation(); //提示选择操作
void manageSongs(); //管理歌曲
void add(); //添加歌曲
void _delete(); //删除歌曲
void play(); //播放
void pause(); //暂停
void previous(); //上一曲
void next(); //下一曲
void chooseMode(); //提示选择播放模式
void viewSongProfile(); //查看歌曲详情
void displayResults(); //反馈操作结果
};
void Player::chooseMode()
{
}
void Player::chooseOperation()
{
cout << "1.管理歌曲" << endl << "2.播放歌曲" << endl << "3.查看歌曲" << endl;
}
void Player::displayResults()
{
}
void Player::add()
{
string singer_name;
string album_name;
string song_name;
cout << "请输入您想添加的歌曲的 歌名 歌手 专辑:" << endl;
cin >> song_name >> singer_name>> album_name;
Singer singer(singer_name);
Album album(album_name, &singer_name);
Song song(song_name, &album);
(*list).push_back(song);
}
void Player::next()
{
}
void Player::pause()
{
}
void Player::play()
{
}
void Player::previous()
{
}
void Player::showList()
{
for (int i = 0; i < 10; i++)
{
cout << i + 1 << "." << "歌名:" << (*list)[i].name << "\t" << "歌手:" << (*list)[i].singer->name << "\t" << "专辑:" << (*list)[i].album->name << endl;
}
}
void Player::viewSongProfile()
{
}
void Player::_delete()
{
cout << "请输入您想删除的歌曲序号:" << endl;
shuanghengxian();
}
void Player::manageSongs()
{
while (1)
{
char c = _getch();
switch (c)
{
case '1':
add();
break;
case '2':
_delete();
break;
default:
printf("请重新输入1-2中的数字\n");
////暂停程序
//system("pause");
////清空控制台
//system("cls");
//break;
}
}
}
class User //用户类
{
public:
int operation; //操作
void sendOperation(Player* player, int Operation);
//{
// /*{
// switch (Operation)
// {
// case 1:
// (*player).manageSongs();
// case 2:
// }
// }*/
//}
};
void _Operation() //操作函数
{
cout << "1.管理歌曲" << endl << "2.播放歌曲" << endl << "3.查看歌曲" << endl;
shuanghengxian();
}
void system_songs(vector<Song>& _songs)
{
//Singer* singer1 = new Singer("薛之谦"); // 改成new
Singer* singer1 = new Singer("薛之谦");
//singer1.songs.push_back("怪咖"); 此处可添加歌手具体信息,对于此播放器操作功能有限,可不实现
Album* album1 = new Album("沉默羔羊", singer1);
Song song1("演员", album1);
_songs.push_back(song1);
Singer* singer2 = new Singer("伍佰");
Album* album2 = new Album("几时回忆", singer2);
Song song2("突然的自我", album2);
_songs.push_back(song2);
Singer* singer3 = new Singer("陈一发儿");
Album* album3 = new Album("电竞贾玲", singer3);
Song song3("童话镇", album3);
_songs.push_back(song3);
Singer* singer4 = new Singer("李荣浩");
Album* album4 = new Album("小眼帅哥", singer4);
Song song4("作曲家", album4);
_songs.push_back(song4);
Singer* singer5 = new Singer("邓紫棋");
Album* album5 = new Album("腿长一米五", singer5);
Song song5("喜欢你", album5);
_songs.push_back(song5);
Singer* singer6 = new Singer("周杰伦");
Album* album6 = new Album("Jay", singer6);
Song song6("简单爱", album6);
_songs.push_back(song6);
Singer* singer7 = new Singer("Beyond");
Album* album7 = new Album("超越", singer7);
Song song7("光辉岁月", album7);
_songs.push_back(song7);
Singer* singer8 = new Singer("陈奕迅");
Album* album8 = new Album("我叫eason", singer8);
Song song8("十年", album8);
_songs.push_back(song8);
Singer* singer9 = new Singer("张国荣");
Album* album9 = new Album("峥嵘岁月", singer9);
Song song9("当爱已成往事", album9);
_songs.push_back(song9);
Singer* singer10 = new Singer("许嵩");
Album* album10 = new Album("年少回忆", singer10);
Song song10("南山忆", album10);
_songs.push_back(song10);
/*for (int i = 0; i < 10; i++)
{
cout << i + 1 << "." << "歌名:" << _songs[i].name << "\t" << "歌手:" << _songs[i].singer->name << "\t" << "专辑:" << _songs[i].album->name << endl;
}*/
}
int main(void)
{
User user;
vector<Song>_songs;
system_songs(_songs);
Player player(&_songs);
bolangxian();
cout << "欢迎使用控制台音乐播放器" << endl;
bolangxian();
player.showList();
shuanghengxian();
cout << "已展示当前所有歌曲,请选择您的操作:" << endl;
_Operation();
}
根据你截图提供的报错信息:在第118行 Album 类的构造函数中,需要传递一个 Singer* 类型的指针作为参数,而你传递的参数 &singer_name 的类型是 string*,因此类型不匹配,编译器会报错。
Singer* singer = new Singer(singer_name);
Album* album = new Album(album_name, singer);
Song song(song_name, album);
(*list).push_back(song);
代码使用了 new 关键字来动态创建 Singer 和 Album 对象,并使用它们在堆上分配的内存的地址来创建 Song 对象。注意,在程序结束时,需要释放这些内存,否则会出现内存泄漏。