使用构造函数初始化类中的指针

mam*_*23n 1 c++ constructor pointers class

Album在“album.h”中有一个这样的课程:

#include "song.h"

class Album
{
public:
Album(string _id, string _title, string _singer, float _price, vector<Song> _songs) : id(_id), title(_title), singer(_singer), price(_price), songs(_songs), availableAlbums(10) {}
void add_song(Song s){ songs.push_back(s); }
void add_availableAlbums(int added){ availableAlbums += added; }
string get_id(){ return id; }
string get_singer(){return singer;}

private:
string id;
string title;
string singer;
float price;
vector <Song> songs;
int availableAlbums;
};
Run Code Online (Sandbox Code Playgroud)

Song“song.h”中的一个类,如下所示:

#include "album.h"

class Song
{
public:
Song(string _numOfSong, string _title, string _singer, string _duration, float _price): 
numOfSong(_numOfSong), title(_title), singer(_singer), duration(_duration), price(_price){}

private:
string numOfSong;
string title;
string singer;
string duration;
float price;
Album* album;
};
Run Code Online (Sandbox Code Playgroud)

我们知道每个Song都有一个Album(每个都Song必须指向它的Album),我通过Album*为每个初始化一个来做到这一点Song,我在这里有一些错误:

error C2061: syntax error : identifier 'Album'
error C2065: '_album' : undeclared identifier
error C2143: syntax error : missing ';' before '*'
error C2614: 'Song' : illegal member initialization: 'album' is not a base or member
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

谢谢

Sha*_*yar 7

好吧,由于我的声誉我无法发表评论,所以我写了一个答案

你的Song类有一个构造函数,它接受一个指向Album类的指针,所以假设你有以下代码:

Album* album = new Album();
Song song = new Song(album);
Run Code Online (Sandbox Code Playgroud)

在第一行你创建一个新专辑,在第二行你用最近创建的专辑创建一首新歌。

Album* album1 = song->album; // This is how you can access song's album
Run Code Online (Sandbox Code Playgroud)

但是,请注意,每当您使用new创建对象时,您都应该在使用delete完该对象后使用关键字来释放用于该对象的内存。

所以,你的代码没有问题,或者至少我找不到任何问题。