2017-04-06 5 views
0

私はC++/cliの新人ですので、いくつかのことをクリアしたいと思います。私のプロジェクトでC++/cliはgetプロパティで演算子を使用できません

私は次のコードを使用しています:限り、私は理解して、プロパティを取得、

//fileloader class 

ref class FileLoader { 
public: 
    property ProgressListeners^ DownloadProgressListeners { 
     ProgressListeners^ get() { return progress_listeners; } 
    } 
    static property FileLoader^ Instance { 
     FileLoader^ get() { return theSingleInstance; } 
    } 

//some methods etc... 
} 

//progresslistener class 


public interface class ProgressListener { 
    void DownloadProgressCallback(Object^ sender, DownloadProgressChangedEventArgs^ e); 
}; 

public ref class ProgressListeners { 
    typedef List<ProgressListener^> ListenersList; 

    ListenersList^ listeners = gcnew ListenersList; 

public: 
    void ProgressCallback(Object^ sender, DownloadProgressChangedEventArgs^ e) { 
     for each (ProgressListener^ listener in listeners) 
      listener->DownloadProgressCallback(sender, e);  
    } 

    void operator += (ProgressListener^ listener) { listeners->Add(listener);} 
}; 

をして、このように行動するcasueを持っていることは左辺値

// somewhere in code 

    ProgressListeners^ tmp = FileLoader::Instance->DownloadProgressListeners; 

    tmp += gcnew WindowsFormProgressListener(downloading_bar, m_log); 
    tmp += gcnew ConsoleProgressListener; 
    tmp += gcnew GUIProgressListener; 
として使用することができません

しかし、私はこのように行動することができるよ場合、それははるかに良いでしょう:

FileLoader::Instance->DownloadProgressListeners += gcnew WindowsFormProgressListener(downloading_bar, m_log); 
FileLoader::Instance->DownloadProgressListeners += gcnew ConsoleProgressListener; 
FileLoader::Instance->DownloadProgressListeners += gcnew GUIProgressListener; 

私はどのようにトン見当がつかないOこのコードが正しい行いと私はここに

+0

あなたが望むようにしようとすると、どんなエラーメッセージが表示されますか? (私たちは推測しないでください。)ここ –

+0

@DavidYawあなたは 重大\tコード\t説明\tプロジェクト\tファイル\tライン\t抑制状態 エラーです\t C2676 \tバイナリ「+」:「ProgressListenersは^」この演算子を定義していませんまたは事前に定義されたオペレータ\tランチャー\tワットに許容型への変換:\ unnamed_project \無名の\ランチャー\ LauncherForm.h が、答えは – bobra

答えて

0

助言これを試してみてください見つけることを願っています:

*FileLoader::Instance->DownloadProgressListeners += gcnew TestListener(); 

DownloadProgressListenersがProgressListenersクラス参照ではなく左辺値です。あなたは左辺値を得ることができます。あなたが見つけた構文:

ProgressListeners^ tmp = FileLoader::Instance->DownloadProgressListeners; 
tmp += gcnew TestListener(); 

私はmsコンパイラの "トリック"だと思います。

+0

あなたは が私はしなかった理由を知らない@alangab感謝の問題を解決しました"*"を自分で入れて、本当にクリスタルクリアなustはちょっと鈍いです(多分私はもっと眠るべきです)。 とスタンダートに従って _tmp + = gcnew TestListener(); _ がまったく動作してはならない、MSのtheeseトリックは時々casueのсonfusionsをコンパイル – bobra

関連する問題