如何打印具有数据类型的地图内容是一个类对象
How to print map content with the data type is a class object
我提到了关于打印地图内容的链接:
打印地图内容
所以我知道打印地图内容的基本原理,但我不确定我是否以以下方式定义了我的地图,数据类型是类对象,其他代码如下所示:
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++结构中的所有内容都是公共的,每个人都可以访问它。所以这个定义可以放在结构外部,然后你应该从结构内部删除它的声明。
附加说明:我的建议是,在问这里之前,总是先使用谷歌搜索引擎。对于这样的基本问题,你总能很快找到答案
错误:未定义的参考
如果列出了任何溢出帖子,则始终选择首先堆栈溢出帖子的链接。
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值