2013-08-28 39 views
1

我提到了這個鏈接有關打印地圖的內容:如何打印地圖內容與數據類型是一個類的對象

print map content

,所以我知道的印刷地圖內容的基礎上,但我不知道如果我定義我的與數據類型如下方式映射是一個類對象,並與其它的代碼,如下所示:

typedef map <string, fsdbSig *> Pinname_sig; 
Pinname_sig _Pinname_sig; 
Pinname_sig :: iterator itPS; 

我想知道打印的地圖內容的方式是與上述相同的鏈接?

for (itPS = _Pinname_sig.begin(); itPS != _Pinname_sig.end(); ++itPS){ 
    cout << "Jden-key:" << itPS->first << "," << "value:" << itPS->second <<endl; 
} 

如果是,那麼當使用重載操作< <,因爲我看到使用該方法的一些職位。

嗨@computer

struct fsdbSig 
{ 
    public: 
     friend std::ostream& operator<< (std::ostream& , const fsdbSig&); //jaden 
     char * _name;  // signal name 
     fsdbVarType _type; // signal type 
     ushort_T _lbitnum; // signal left bit number 
     ushort_T _rbitnum; // signal right bit number 
     fsdbBytesPerBit _bpb; // signal byte per bit 
     byte_T _value;  // signal value 

     fsdbSig(char * name, fsdbVarType type, ushort_T lbitnum, ushort_T rbitnum, fsdbBytesPerBit bpb, byte_T value) // constructor 
     { 
      _name = name; 
      _type = type; 
      _lbitnum = lbitnum ; 
      _rbitnum = rbitnum ; 
      _bpb = bpb; 
      _value = value ; 
     } 

}; 

但發生錯誤未定義的參考`運營商< <(STD :: basic_ostream

+0

我很困惑這個問題是關於如何發送一個指針到對象到一個'std :: ostream'或者如何爲你的映射元素類型寫一個插入操作符。你能否澄清這個問題(或者它的* *或*都不是那些?)。 – WhozCraig

+0

@WhozCraig嗨,其實這兩個問題我都希望知道答案。 :) –

回答

0

基本上把它打印出來,你會做什麼:

typedef map <string, fsdbSig *> Pinname_sig; 
Pinname_sig _Pinname_sig; 
Pinname_sig::iterator itPS; 

for (itPS = _Pinname_sig.begin(); itPS != _Pinname_sig.end(); ++itPS){ 
    cout << "Jden-key:"<< itPS->first<< ","<< "value:"<< *(itPS->second) <<endl; 
                 ^since itPS->second 
                 is pointer to fsdbSig 
} 

然而,這隻有在fsdbSig是一個定義爲operator<<的類型時纔有效,在全局命名空間中是這樣的:

std::ostream& operator<< (std::ostream&, const fsdbSig&); 

或這fsdbSig類:

class fsdbSig { 
      public: 
      friend std::ostream& operator<< (std::ostream& , const fsdbSig&); 
    }; 

如果運營商需要訪問fsdbSig對象的私人數據。並注意:如果您的類fsdbSig很複雜,您需要知道打印它的意義。

在您編輯後:

Hi,after i copied to the class now got this error: undefined reference to `operator<<(std::basic_ostream >&, fsdbSig const&)'

對不起,我以爲你會知道你也必須添加operator<<不僅聲明的定義,看來你真的是初學者。你有未定義的參考,因爲函數被調用,這是沒有定義。這是鏈接錯誤。那麼現在該怎麼做?提供operator<<的定義。然而,這可以有很多含義是打印您的類的對象是什麼:「碧BIP」

  • 也許這意味着打印的名字
  • 也許就意味着打印的名字和做
  • 也許打印名稱和值

這就是爲什麼我說你需要知道它是什麼,比如你可以將它定義爲

std::ostream& operator<< (std::ostream& os, const fsdbSig& f){ 
    os<<"My name is: "<<f.name; 
    return os; 
} 

,它不必是因爲所有的C++結構都是公開的,所以每個人都可以訪問它。所以這定義可以被放在結構外,你應該從裏面的結構中刪除它的聲明


額外注: 我的建議是先一直使用谷歌搜索引擎,詢問這裏之前。你總是會找到快速回答這些基本的問題,如

error: undefined reference

,總是選擇鏈接到第一堆棧溢出的職位如果沒有列出任何人。

+0

我嘗試使用*(itPS-> second)並且發生此錯誤 錯誤:'std :: operator –

+0

'中的'operator <<'沒有匹配嗎?是否爲類fsdbSig定義了operator <<? plaese看到我的答案,你需要定義這個操作符。如果您不知道如何定義此運算符 – 4pie0

+0

@ milk4508,請另外插入類fsdbSig的代碼,並注意:如果您的類fsdbSig非常複雜,您需要知道打印它的含義 – 4pie0

相關問題