我试图创建一个家庭作业的地图,我在标题中声明它,我试图访问它但我不断收到错误。我不确定代码是什么问题。我将代码实现到加载函数中,但如果你能帮助我,我似乎无法在get函数中使用它
这是头文件
class Movies {
// data is private by default
Movie *movies;
int movieCnt;
map<string,**string> Mymap;
public:
Movies(string);
int getMovieCount() const;
const Movie * getMovie(string) const;
~Movies();
private:
void loadMovies(string);
int getMovieHash(string) const;
};
这是代码
const Movie * Movies::getMovie(string mc) const {
if(mc.length()==0)
return NULL; // not found
else
return &(Mymap.find(mc));
}
Movies::~Movies() {delete[] movies; movies = NULL;}
void Movies::loadMovies(string fn) {
ifstream iS(fn); // technically should be c_str
string s;
getline(iS, s); // skip heading
getline(iS, s);
movieCnt=0;
while(!iS.eof()) {
Movie* m = new Movie(s);
Mymap[(m->getTitle())] = *m;
movieCnt++;
getline(iS, s);
}
iS.close();
}
答案 0 :(得分:1)
指针星号位于错误的位置。它应该是这样的:
map<string,string**> Mymap;
或者更像C ++
map<std::string, std::vector<std::vector<std::string>>> Mymap;
您的getMovie(string f)
功能可以通过以下方式改进:
const Movie Movies::getMovie(string mc) const
{
if(mc.length() > 0)
{
auto it = Mymap.find(mc);
if (it != Mymap.end())
return *it; //by value
}
else
throw std::runtime_error;
}
答案 1 :(得分:0)
地图的值应为Movie
对象。
map<string, Movie> Mymap;
答案 2 :(得分:0)
请更具体地说明您的错误。怎么了?在此期间,请看一下:
const Movie * Movies::getMovie(string mc) const {
if(mc.length()==0)
return NULL; // not found
else
return &(Mymap.find(mc));
}
在return &(Mymap.find(mc));
中,您返回一个指向临时对象的指针,这是不太可能的。
尝试返回对象本身,
const Movie Movies::getMovie(string mc) const {
if(mc.length()==0)
return NULL; // not found
else
std::map<string, string**>::const_iterator it = Mymap.find(mc);
Movie m = it*;
return m;
}
或条目的索引,并使用索引从地图中获取。