2017-11-06 2 views
0

Also habe ich eine Klasse namens Song und eine andere Klasse namens SongLibrary. Die Songbibliothek enthält nur einen Satz aller Songs und Methoden.C++ find_if Elementvariable einer anderen Klasse

Ich versuche gerade, eine Funktion zum Durchsuchen der Song-Bibliothek und prüfen, ob ein Lied einen bestimmten Titel hat.

Das Problem, das ich habe, ist, dass der Liedtitel von der songlibrary Klasse nicht zugänglich ist.

m_songs ist der Name des Sets, das ich in der songlibrary verwende, um alle Songs zu speichern.

m_title ist die Membervariable für den Titel in Song.cpp

in SongLibrary.cpp

bool SongLibrary::SearchSong(string title) 
{ 
    bool found = false; 

    std::find_if(begin(m_songs), end(m_songs), 
     [&](Song const& p) 
    { 
     if (p.m_title == title) // error here (m_title is inaccessible) 
     { 
      found = true; 
     } 
    }); 

    return found; 

} 

habe ich versucht, die Methode ein Freund der Song-Klasse zu machen, aber ich bin nicht genau Sicher verstehe ich, wie es funktioniert.

EDIT I Das Problem wurde behoben folgendes

bool SongLibrary::SearchSong(string title) 
{ 
    if (find_if(begin(m_songs), end(m_songs),[&](Song const& p) 

    {return p.getTitle() == title;}) != end(m_songs)) 
    { 
     return true; 
    } 
    return false; 

} 
+2

Make 'SongLibrary' einen Freund von' Song' . Oder noch besser, machen Sie 'm_title' öffentlich. –

+4

Warum hat deine 'Song' Klasse keinen' öffentlichen' Weg den Titel zu bekommen? – nwp

+0

weil ich ein Idiot bin –

Antwort

1

mit der Wenn Sie Freund Klassen verwenden möchten, können Sie SongLibrary ein Freund von Song machen sollte. Aber ich schlage vor, Sie einen öffentlichen Getter machen für Ihren Song-Titel wie folgt aus:

const std::string& getTitle() const { return m_title; } 
+0

Außer einem öffentlichen Getter für nur die Rückkehr eines Mitglieds ist ein Anti-Muster. –

+1

sollte "const" sein und const-Referenz zurückgeben, um Kopien zu vermeiden. – Jarod42

+0

@RickAstley: Es wäre strittig, wenn Rückgabetyp nicht-const Referenz wäre, aber es ist nicht. – Jarod42

0

hinzufügen "Getter" -Funktion in song zum Beispiel

class Song { 
    public: 
     const std::string& getTitle(){ 
      return Title; 
     } 
     ... 
    private: 
     ... 
     std::string Title; 
} 
Verwandte Themen