2013-03-12 4 views
0

Im пытается создать карту для домашней работы, я объявил ее в заголовке, и я пытаюсь получить к ней доступ, но я продолжаю получать ошибки. im не уверен, что не так с кодом. я реализовал код в функции нагрузки, но я не могу заставить его работать в функции получить, если вы могли бы помочь благодаряДоступ к карте C++

это заголовочный файл

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

Объявление 'map Mymap;' недопустимо C++. Кроме того, ошибки, которые вы получаете, являются ли они ошибками компилятора (в этом случае их следует включать)? Или это ошибки времени выполнения (в этом случае вы должны использовать отладчик для их поиска)? –

ответ

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; 
} 
0

Значение вашей карты должно быть Movie объект.

map<string, Movie> Mymap; 
+0

Учитывая 'Mymap [(m-> getTitle())] = * m;', это должен быть просто объект «Movie». – MSalters

+0

@MSalters Исправить. Отредактировано, чтобы это отразить. –

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; 
} 

или индекс к входу и получить его с карты с помощью индекса.

+0

'std :: map :: find' возвращает итератор элементу в противном случае' std :: map :: end() ' –

+0

для этой части я продолжаю получать ошибку, в которой говорится, что нет подходящего преобразования Movie m = Mymap.find (mc); им не уверен, как исправить. я пытаюсь сделать это где-то еще? –

+0

@TonyTheLion в порядке, я посмотрю на это –

Смежные вопросы