1

我提到了这个关于打印地图内容的链接:

打印地图内容

所以我知道打印地图内容的基础知识,但是我不确定我是否以以下方式定义了我的地图,数据类型是类对象,其他代码如下所示:

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;
}

如果是,那么何时使用重载运算符<<,因为我看到了一些使用该方法的帖子。

嗨@电脑

  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 ;
        }   

};

但是发生错误 undefined reference to `operator<<(std::basic_ostream

4

1 回答 1

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于具有 defined 的类型,operator<<在全局命名空间中是这样的:

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

或者在fsdbSig课堂上:

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

如果此操作员需要访问fsdbSig对象的私有数据。请注意:如果您的类 fsdbSig 很复杂,您需要知道打印它意味着什么。

编辑后:

嗨,在我复制到班级后,现在得到了这个错误:未定义的对 `operator<<(std::basic_ostream >&, fsdbSig const&)' 的引用

对不起,我以为你会知道你必须添加你的operator<<not only 声明的定义,看来你真的是初学者。您有未定义的引用,因为调用了未定义的函数。这是链接错误。那么现在该怎么办呢?提供 的定义operator<<。但是,打印类的对象可能有很多含义:

  • 也许这意味着打印它的名字
  • 或者它可能意味着打印它的名字并做“Bi bip!”
  • 或者打印名称和值

这就是为什么我说你需要知道它是什么,例如你可以将它定义为

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

它不必成为结构的朋友,因为 C++ 结构中的所有内容都是公共的,每个人都可以访问它。所以这个定义可以放在结构之外,然后你应该从内部结构中删除它的声明。


附加说明:我的建议是始终先使用谷歌搜索引擎,然后再在这里提问。您总是会很快找到诸如此类基本问题的答案

错误:未定义的引用

如果列出了其中任何一个,请始终首先选择堆栈溢出帖子的链接。

于 2013-08-28T03:59:36.920 回答