gpt4 book ai didi

c++ - 如何打印 map 内容数据类型是类对象

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:44 39 4
gpt4 key购买 nike

我引用了这个关于打印 map 内容的链接:

print map content

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

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

我想知道打印 map 内容的方式和上面的链接一样吗?

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

};

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

最佳答案

基本上打印这个你会做:

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

如果此运算符(operator)需要访问 fsdbSig 的私有(private)数据目的。并注意:如果您的类 fsdbSig 很复杂,您需要知道打印它意味着什么。

编辑后:

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

抱歉,我以为您会知道您还必须添加 operator<< 的定义不仅声明,看来你真的是初学者。您有 undefined reference ,因为调用的函数未定义。这是链接错误。那么现在怎么办?提供 operator<< 的定义.然而,这可以有很多含义,打印你的类的对象是什么:

  • 也许这意味着打印它的名字
  • 或者它的意思是打印它的名字然后做“Bi bip!”
  • 或者打印名称和值

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

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

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


补充说明:我的建议是先使用谷歌搜索引擎,然后再在这里提问。您总能快速找到诸如

之类的基本问题的答案

error: undefined reference

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

关于c++ - 如何打印 map 内容数据类型是类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18479086/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com