"no matching function for call to"... c++


(snajper___) #1

kolejny error :stuck_out_tongue:
taki błąd pojawia się podczas wykonywania make w linuxie.
a dokładniej:

music_manager.cpp: In member function 'bool MusicManager::exists_music(const string&):
music_manager.cpp:69:74: error: no matching function for call to 'make_pair(const string&, MusicManager::MusicResource)'
std::make_pair<std::string, MusicResource> (file, MusicResource()));

jak sobie z nim poradzić? W sieci znalazłem parę podobnych przypadków, ale nic z tego nie kumam :confused: A chciałbym sobie skompilować grę.
A tak wygląda ta funkcja w music_manager.cpp:

bool
MusicManager::exists_music(const std::string& file)
{
  if(!audio_device)
    return true;
  // song already loaded?
  std::map<std::string, MusicResource>::iterator i = musics.find(file);
  if(i != musics.end()) {
    return true;                                      
  }
  
  Mix_Music* song = Mix_LoadMUS(file.c_str());
  if(song == 0)
    return false;

  // insert into music list
  std::pair<std::map<std::string, MusicResource>::iterator, bool> result = 
    musics.insert(
        std::make_pair<std::string, MusicResource> (file, MusicResource()));
  MusicResource& resource = result.first->second;
  resource.manager = this;
  resource.music = song;

  return true;
}

–EDIT
poradziłem sobie w końcu jakoś z wszystkimi błędami, gra się skompilowała (SuperTux 0.1.3), ale… po uruchomieniu w Windowsie tylko na chwilę przełącza się na pełny ekran, po czym zamyka. :frowning: Nie wiem czemu. Żadnego komunikatu, nic… A męczyłem się z tym 2 dni :confused:


(Razi) #2

Uruchom przez konsolę, może tam zostają jakieś ślady. Albo skompiluj z flagami -g3 i uruchom przez GDB, dostaniesz konkretne info gdzie się sypie. Możesz przy okazji wspomóc twórców wskazując problem :slight_smile:

Wiele się przy czymś takim można nauczyć, polecam.


(snajper___) #3

hmm, GDB po uruchomieniu gry przez run wyświetla tylko coś takiego:

[New Thread 7328.0x1f14]
[New Thread 7328.0x1c4c]
[New Thread 7328.0x1ab0]
[New Thread 7328.0x1e88]
[New Thread 7328.0x254c]
[New Thread 7328.0x1db4]
[New Thread 7328.0x1f74]
[New Thread 7328.0x24f0]
[New Thread 7328.0x21b0]
[New Thread 7328.0x1ad4]
[New Thread 7328.0x2794]
[New Thread 7328.0x4c4]
[New Thread 7328.0x26c8]
[New Thread 7328.0x235c]
[New Thread 7328.0x4e0]
[New Thread 7328.0x2004]
[New Thread 7328.0x22d4]
[New Thread 7328.0x2380]
[New Thread 7328.0x25f8]
[Inferior 1 (process 7328) exited with code 01]

tylko jeszcze nie bardzo wiem co to oznacza :slight_smile:
A przez konsolę już uruchamiałem, tam też było pusto.


(Razi) #4

Bez kompilacji z -g3 wiele nie zdziałasz.


(snajper___) #5

to już zrobiłem… Tzn. tak mi się wydaje - z tego co wygooglałem, robi się to przez make CXXFLAGS="-g3". Enyłej, chyba wywalę to całe MinGW i postawię wszystko po kolei na czysto, zwracając większą uwagę na różne warningi. Kiedyś, jeszcze pod XP, SuperTux 0.1.3 kompilował mi się bez żadnych zgrzytów, więc nie wiem, skąd nagle teraz wzięły się te wszystkie błędy.

–EDIT.
Dobra, po kolejnym dniu kombinowania wyszło, że skompilowana gra działa jednak prawidłowo - problem leżał w bibliotekach, konkretnie SDL_mixer.dll i SDL_image.dll. Po podmienieniu ich na te mieszczące się w pakiecie z binarką gra działa bez problemów.