2017-09-27 3 views
0

これまでのこの月、私はC++をたくさん勉強していて、少し練習しようとしていることを知っています。ファイルsrc/electron/atom/browser/api/atom_api_session.ccポインタの中に何が入っているかを見積もるためにcoutをオーバーロードする

このコードがある:

379 void Session::OnDownloadCreated(content::DownloadManager* manager,                  
    380         content::DownloadItem* item) {                   
    381 if (item->IsSavePackageDownload())                          
    382  return;                                
    383                                   
    384 v8::Locker locker(isolate());                           
    385 v8::HandleScope handle_scope(isolate());                        
    386 bool prevent_default = Emit(                           
    387  "will-download",                             
    388  DownloadItem::Create(isolate(), item),                        
    389  item->GetWebContents());                           
    390 if (prevent_default) {                             
    391  item->Cancel(true);                             
    392  item->Remove();                              
    393 }                                  
    394 } 

私はstdout::cout << manager;とマネージャーが何であるかを印刷したいと思いますので、本は私に言ったように私は<<をオーバーロードする関数を作成しました:

375 void operator << (std::ostream & o, const content::DownloadManager* manager) {               
    376 o << "manager:" << manager;                            
    377 } 

しかし、これはまったく機能しません。

+1

ストリームを返す必要があります。 – perreal

+0

"これはまったく機能しません" - どのように動作しないのですか?何が起こり、予想される結果は何ですか? – Jay

+0

@jayコンパイラが失敗します –

答えて

0

content::DownloadManager*は、クラスインスタンスへのポインタのようです。 o << "manager:" << manager;を実行するだけでは、クラスの内容は印刷されません。 <<演算子のオーバーロードを使用してそれらを印刷するには、content::DownloadManagerのデータメンバーを知る必要があります。ただし、更新後はreturnstd::ostreamになるはずです。たとえば、<<>>オペレータに過負荷をかけるための次の例を見てください。

struct Quote 
{ 
    std::string ticker; 
    std::string exchange; 
    std::string full_name; 
    double value; 
    std::string data; 
    long long timestampus; 
    long long timestamps; 

    friend std::ostream& operator<< (std::ostream& out, Quote& object) 
    { 
     out << object.ticker << " " << object.exchange << " " << object.full_name << " " << object.value << " " << object.data << " " << object.timestampus << " " << object.timestamps; 
     return out; 
    } 

    friend std::istream& operator>> (std::istream& in, Quote& object) 
    { 
     in >> object.ticker; 
     in >> object.exchange; 
     in >> object.full_name; 
     in >> object.value; 
     in >> object.data; 
     in >> object.timestampus; 
     in >> object.timestamps; 
     return in; 
    } 
}; 

はまた、あなたがメンバーや友人や非友人としてそれを定義したいかどうかを理解するために見て、このlinkを取ります。お役に立てれば。

+0

ありがとう!これは明らかであった。 –

関連する問題