如何打印具有数据类型的地图内容是一个类对象

How to print map content with the data type is a class object

本文关键字:一个 对象 打印 何打印 数据类型 地图      更新时间:2023-10-16

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

打印地图内容

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

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

如果是,则何时使用过载运算符<lt;因为我看到一些帖子使用了这种方法。

嗨@电脑

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

但是发生错误,未定义对`operator<lt;(std::basic_stream

基本上要打印这个,你会做:

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

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

编辑后:

嗨,在我复制到类之后,现在得到了这个错误:未定义的引用到`operator<lt;(std::basic_stream>&,fsdbSig常量&)'

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

  • 也许它的意思是打印它的名字
  • 或者它的意思是打印它的名字并做"Bi-bip!"
  • 或者打印名称和值

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

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

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


附加说明:我的建议是,在问这里之前,总是先使用谷歌搜索引擎。对于这样的基本问题,你总能很快找到答案

错误:未定义的参考

如果列出了任何溢出帖子,则始终选择首先堆栈溢出帖子的链接。

相关文章: