C ++显示错误的对象

时间:2017-12-05 08:37:26

标签: c++

我是C ++的初学者,我正在尝试创建2个类,每天都存储Movie。
例如,星期六有2部电影。其中一部电影是蝙蝠侠,另一部是蜘蛛侠。所以对象Day saturday应该存储2个不同的电影。但问题是,当我尝试在类showAllMovies()中使用函数Day显示星期六存储的对象时,它只显示了最后一部电影。知道我做错了什么吗?

编辑:我只能使用这些库,因为我的作业不允许我使用其他库。

<iostream>, <iomanip>, <fstream>, <cmath>
#include <iostream> 
using namespace std;

class Movie {
private:
    char* name;
public:
    void setName(char* n) {
        name = n;
    }
    char* getName() {
        return name;
    }
};

class Day {
private:
    int movieCount = 0;
    Movie movie[20];
public:
    void addMovie(Movie p) {
        movie[movieCount] = p;
        movieCount++;
    }
    void showAllMovies() {
        for (int i = 0;i < movieCount;i++) {
            cout << "Index: " << i << ", Name: " << movie[i].getName() << endl;
        }
    }
};

int main()
{
    Day saturday;
    int numOfMovies = 0;

    cout << "Input the number of Movies: " << endl;
    cin >> numOfMovies;

    cout << "Input the name of Movie: " << endl;
    for (int i = 0;i < numOfMovies;i++) {
        char movieName[10];
        //Get input
        cin >> movieName;
        Movie m;
        m.setName(movieName);
        saturday.addMovie(m);

    }

    //Show all the name of movies
    cout << "All movies on saturday: " << endl;
    saturday.showAllMovies();

    return 0;
}

输入: 2 蝙蝠侠 蜘蛛侠

输出:
enter image description here

我希望得到像

这样的东西
All movies on saturday:
Index: 0, Name: Batman
Index: 1, Name: Spiderman

感谢大家帮帮我。解决方案是改变

char movieName[10];

char *movieName = new char[10];

1 个答案:

答案 0 :(得分:3)

for (int i = 0;i < numOfMovies;i++) {
        char movieName[10];
        //Get input
        cin >> movieName;
        Movie m;
        m.setName(movieName);
        saturday.addMovie(m);

    }

当您在内部致电setName时,您nameMovie对象的字段)指向movieName - 但是,movieName会在下一个由于范围而导致for循环的迭代。

循环结束后也不应访问movieName的最后一个实例。