2017-11-06 12 views
0

私はSongと呼ばれるクラスと呼ばれ、別のクラスはSongLibraryと呼ばれています。 Songlibraryには、すべての曲と適切な方法のセットが含まれています。C++ find_if別のクラスのメンバー変数

現在、曲ライブラリを検索して曲に特定のタイトルが付いているかどうかを確認する機能を作っています。

私が抱えている問題は、曲名がsonglibraryクラスからアクセスできないということです。

m_songsは、すべての曲を保存するためにsonglibraryで使用しているセットの名前です。

m_titleは、私が法に歌のクラスの友人を作ることを試みてきたが、私は正確ではないよ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; 

} 

にSong.cpp

タイトルのメンバ変数であります確かに私はそれがどのように機能するのか理解している

EDIT は、私はあなたの友人のクラスを使用したい場合は、SongLibrarySongの友人を作る必要があり、次の

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

メイクを'「ゲッター」機能を追加します。しかし、私はあなたがこのようなあなたのソングタイトルのための公共ゲッターが作る示唆します。それとも 'm_title'を公開する方が良いでしょうか。 –

+4

あなたの 'Song'クラスはなぜタイトルを取得するための' public'方法を持っていませんか? – nwp

+0

私はばかだから –

答えて

1

を使用して問題を修正しました。 Song` `の友人をSongLibrary`

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

メンバを返すだけのパブリックゲッタを持つことを除いて、アンチパターンです。 –

+1

は 'const'でなければならず、コピーを避けるためにconst参照を返します。 – Jarod42

+0

@RickAstley:戻り値の型が非const参照の場合は議論の余地がありますが、そうではありません。 – Jarod42

0

例えば、song

class Song { 
    public: 
     const std::string& getTitle(){ 
      return Title; 
     } 
     ... 
    private: 
     ... 
     std::string Title; 
} 
関連する問題