将struct更改为C ++类

时间:2014-12-05 21:14:32

标签: c++

对于我的家庭作业,我应该编写一个收集有关音乐专辑信息的结构。我很容易就能做到这一点。我的任务的第二部分是将我的结构转换为一个类,我无法编译代码。这是我的两个代码。

结构代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct Date
{
    int month;
    int day;
    int year;
};

struct Album
{
    string name;
    string artist;
    vector <string> songs;
    Date release;
};

void initializeAlbum(Album& a);
void initializeSongs(vector <string> & songs);
void printAlbum(Album a);

int main()
{
    Album my_album;
    initializeAlbum(my_album);
    printAlbum(my_album);
    return 0;
}


void initializeAlbum(Album& a)
{
    cout << "Enter album name:" << endl;
    getline(cin, a.name);
    cout << "Enter artist name:" << endl;
    getline(cin, a.artist);
    cout << "Enter the release month (numeric format: ex. 06/10/1995):" << endl;
    cin >> a.release.month;
    cout << "Enter the release day:" << endl;
    cin >> a.release.day;
    cout << "Enter the release year:" << endl;
    cin >> a.release.year;

    initializeSongs(a.songs);
}

void initializeSongs(vector <string> & songs)
{
    cout << "How many songs are in the album?" << endl;
    int j = 0;
    cin >> j;
    string answer;
    cout << "Enter each song name one at a time:" << endl;
        for ( int y = 0; y <= j; y++)
        {
            getline (cin, answer);
            songs.push_back(answer);
        }
}


void printAlbum(Album a)
{
    cout << "The album name is " << a.name << endl;
    cout << "The artist name is " << a.artist << endl;
    cout << "The release date is " << a.release.day << "/" << a.release.month << "/" << a.release.year << endl;
    cout << "The songs are:";
    for (int x = 0; x < a.songs.size(); x++ )
        cout << "   " << a.songs[x] << endl;
}

班级代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;
struct Date
{
    int month;
    int day;
    int year;
};


class Album
{
    public:
        void printAlbum();
        void initializeAlbum();
        string name;
        string artist;
        vector <string> songs;
        Date release;
    private:
        void initializeSongs();
};
int main()
{
    Album a;
    a.initializeAlbum();
    a.printAlbum();
    return 0;
}

void Album::initializeAlbum( )
{
    cout << "Enter album name:" << endl;
    getline(cin, name);
    cout << "Enter artist name:" << endl;
    getline(cin, artist);
    cout << "Enter the release month (numeric format: ex. 06/10/1995):" << endl;
    cin >> release.month;
    cout << "Enter the release day:" << endl;
    cin >> release.day;
    cout << "Enter the release year:" << endl;
    cin >> release.year;
    initializeSongs(songs);
}

void Album::initializeSongs()
{
    cout << "How many songs are in the album?" << endl;
    int j = 0;
    cin >> j;
    string answer;
    cout << "Enter each song name one at a time:" << endl;
        for ( int y = 0; y <= j; y++)
        {
            getline (cin, answer);
            songs.push_back(answer);
        }
}


void Album::printAlbum()
{
    cout << "The album name is " << name << endl;
    cout << "The artist name is " << artist << endl;
    cout << "The release date is " << release.day << "/" << release.month << "/" << release.year << endl;
    cout << "The songs are:";
    for (int x = 0; x < songs.size(); x++ )
        cout << "   " << songs[x] << endl;
}

2 个答案:

答案 0 :(得分:1)

也许这一行是您的错误:initializeSongs(songs);函数中的void Album::initializeAlbum()

关注编译器消息。

答案 1 :(得分:1)

此函数采用零参数:

void Album::initializeSongs()
{
    cout << "How many songs are in the album?" << endl;
    int j = 0;
    cin >> j;
    string answer;
    cout << "Enter each song name one at a time:" << endl;
        for ( int y = 0; y <= j; y++)
        {
            getline (cin, answer);
            songs.push_back(answer);
        }
}

然而你打电话

initializeSongs(songs);

您可以在班级功能中访问您的成员,只需将其命名为:

initializeSongs();

编译好:

#include <iostream>
#include <vector>
#include <string>

using namespace std;
struct Date
{
    int month;
    int day;
    int year;
};


class Album
{
    public:
        void printAlbum();
        void initializeAlbum();
        string name;
        string artist;
        vector <string> songs;
        Date release;
    private:
        void initializeSongs();
};
int main()
{
    Album a;
    a.initializeAlbum();
    a.printAlbum();
    return 0;
}

void Album::initializeAlbum( )
{
    cout << "Enter album name:" << endl;
    getline(cin, name);
    cout << "Enter artist name:" << endl;
    getline(cin, artist);
    cout << "Enter the release month (numeric format: ex. 06/10/1995):" << endl;
    cin >> release.month;
    cout << "Enter the release day:" << endl;
    cin >> release.day;
    cout << "Enter the release year:" << endl;
    cin >> release.year;
    initializeSongs();
}

void Album::initializeSongs()
{
    cout << "How many songs are in the album?" << endl;
    int j = 0;
    cin >> j;
    string answer;
    cout << "Enter each song name one at a time:" << endl;
        for ( int y = 0; y <= j; y++)
        {
            getline (cin, answer);
            songs.push_back(answer);
        }
}


void Album::printAlbum()
{
    cout << "The album name is " << name << endl;
    cout << "The artist name is " << artist << endl;
    cout << "The release date is " << release.day << "/" << release.month << "/" << release.year << endl;
    cout << "The songs are:";
    for (int x = 0; x < songs.size(); x++ )
        cout << "   " << songs[x] << endl;
}