创建一个指向struct的指针数组

时间:2014-10-21 22:50:36

标签: c++ arrays pointers struct

我无法理解如何创建指向结构的指针数组。我试图在论坛中查找类似的示例和线程,但我仍然无法让我的代码工作!结果,我相信我写了一段丑陋的代码,我不知道哪里出错了以及如何修复它。 这是代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct Movie
    {
       string name;
       int numawards;
       int nomination;
       int year;
    };

void *readfile(ifstream &infile, int &n);

int main()
{
    ifstream infile;
    int n = 0;
    infile.open("old_movies.txt");
    Movie *oldmovies;
    oldmovies = readfile (infile, n);

    return 0;

}
//*function documentation//
void *readfile (ifstream &infile, int &n)
{

    infile >> n;
    Movie *movies;
    movies = new Movie[n];
    for (int i = 0 ; i < n ; i++)
    {
        infile >> movies[i]->year >> movies[i]->numawards >> movies[i]->nomination;
        infile.ignore();
        infile.ignore();
        getline(infile, movies[i]->name);

        cout << movies[i]->year << " " << movies[i]->numawards << " " << movies[i]->nomination << " " << endl << movies[i]->name<< endl; //the cout here is to test and see if the code works.
    }
    return movies;
}

此代码的目的是读取包含电影名称,奖励数量,提名方式以及生成年份的txt文件,然后使用指针将其打印出来。这是文件的样子:

2
1935 1 3

The Dark Angel

1935 4 6

The Informer

1935 1 8

前4位代表年份,第2位代表获奖的数量,最后一位代表获奖提名的次数。

无论如何,我被困在这一部分,我真的不知道该怎么做。我只是希望这个代码并没有那么糟糕到有很多东西需要改变。任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

让我们看看你在这里有什么:

Movie *movies;
movies = new Movie[n];

这将分配Movie个实例的数组。要动态分配指针数组,需要将其更改为

Movie** movies;
movies = new Movie*[n];

现在在for循环中,您需要分配每个Movie实例:

movies[i] = new Movie();

您还应该更改readfile()以返回Movie**而不是void*,以便您以后不必使用任何演员表。

但你真的需要一系列指针吗?为什么不使用一组结构。这样可以避免额外的间接级别,并使代码更简单。