c++ - Complie Error: could not convert -
i trying put specific amount of movies user enters array. going use pointer of arrays of class in function shown below
when compile program, gives me error message saying "could not convert ' (moviedata*) (& pmovie)' 'moviedata*' moviedata'
my body
int amount = 0; cout << "how many movies did watch last month?"; cin >> amount; moviedata *pmovie[amount]; *pmovie = new moviedata[amount]; cout << "please enter information of movies!" << endl; readmoviedata(pmovie, amount); //this line! cout << "here information movies!" << endl; moviedatastats(pmovie, amount); //this line! and here functions
void readmoviedata(moviedata *pmovie, int const size) { string title; string director; int year; int time; for(int = 0; < size; i++) { cout << "please enter title of movie."; getline(cin,title); pmovie[i].settitle(title); cout << "\nplease enter director name of movie."; getline(cin,director); pmovie[i].setdirector(director); cout << "\nplease enter year released."; cin >> year; if(year >= 1900 && year <= 2004) pmovie[i].setyear(year); else { cout << "please enter year between 1900 , 2004." << endl; year = 0; } cout << "\nplease enter time movie last."; cin >> time; if(time > 0 && time < 14400) pmovie[i].settime(time); else { time = 0; cout << "please enter time between 0 , 14400 in minutes." << endl; } } } that function set information private class
and function play around information of private class
void moviedatastats(moviedata *pmovie, int const size) { float sumtime = 0.0; float averagetime = 0.0; (int = 0; < size; i++) { sumtime +=pmovie[i].gettime(); } averagetime = sumtime/size; cout << "your average time of movie is: " << averagetime << endl; int oldyear = 0; int count = 0; int recentyear = 0; int counter = 0; oldyear = pmovie[0].getyear(); recentyear = pmovie[0].getyear(); (int j = 1; j < size; j++) { if(pmovie[j].getyear() < oldyear) { oldyear = pmovie[j].getyear(); count = j; } else if(pmovie[j].getyear() > recentyear) { recentyear = pmovie[j].getyear(); counter = j; } } cout << "the oldest movie have watched called..." << endl; cout << "title: " << pmovie[count].gettitle() << endl; cout << "director: " << pmovie[count].getdirector() << endl; cout << "release year: " << pmovie[count].getyear() << endl; cout << "the newest movie have watched called..." << endl; cout << "title: " << pmovie[counter].gettitle() << endl; cout << "director: " << pmovie[counter].getdirector() << endl; cout << "release year: " << pmovie[counter].getyear() << endl; } also, how delete allocated memory , set pointer point @ null?
your problem here:
moviedata *pmovie[amount]; *pmovie = new moviedata[amount]; the first line declares array of movie data pointers. don't want -- want pointer moviedata. thus, second line wrong. here correction:
moviedata *pmovie; pmovie = new moviedata[amount]; as when deallocate, danger of using code above. deallocate when no longer need pmovie. when time when no longer need reason why memory checkers exist -- easy make mistake. that's why vectors convenient:
#include <vector> //... std::vector<moviedata> pmovie(amount); that's it. no need deallocate anything. now, interface existing functions, pass address of first element in vector:
readmoviedata(&pmovie[0], pmovie.size());
Comments
Post a Comment