为什么当我试图打印地图内容时,我得到的是地址而不是值?在C++中
我有一个空的服务等级,还有两个等级的车和书,我将在以后租用更多类型的服务来扩展这个等级。我还有一个班上的人。 之后,我声明了一个map std::map servicii;这个功能是:为什么当我试图打印地图内容时,我得到的是地址而不是值?在C++中,c++,class,dictionary,object,C++,Class,Dictionary,Object,我有一个空的服务等级,还有两个等级的车和书,我将在以后租用更多类型的服务来扩展这个等级。我还有一个班上的人。 之后,我声明了一个map std::map servicii;这个功能是: template<class T> void rentService(Person *p,T service) { if (typeid(*service).name() == typeid(Car).name()) { if(p->checkDriverLicense(
template<class T>
void rentService(Person *p,T service)
{
if (typeid(*service).name() == typeid(Car).name()) {
if(p->checkDriverLicense()==true)
{
std::cout<<"Name:"<<p->getName()<<std::endl;
servicii.insert(std::make_pair(p,service));
}
}
}
以及打印功能:
void print(std::map<Person*,Servicii*> m) {
for(auto const &it: m) {
std::cout << "[" << it.first << "," << it.second << "]" << std::endl;
}
}
为什么地图中有地址?您需要取消对指针的引用:
void print(std::map<Person*,Servicii*> m) {
for(auto const &it: m) {
std::cout << "[" << *(it.first) << "," << *(it.second) << "]" << std::endl;
}
}
确保您已经实现了操作符您正在打印指针本身,它是一个地址。 您需要的是取消对指针的引用。 例如:
std::cout << it.first->getName() << "\n";
为什么地图上有我的地址
因为那是你在地图上储存的东西。为key和value指定的类型分别是Person*和Servicii*。这两种类型都是指针。指针存储内存地址
当您将指针插入字符流时,它将以十六进制数打印,但指向字符的指针除外,它的处理方式有所不同
不要使用裸指针。可以使用智能指针,也可以存储为容器的元素。例如,在这种情况下,std::map可能是合适的。直接回答:
由于映射的键值对是指针,指针是指向某个地址的地址,因此在打印指针时,会得到一个十六进制值,表示指针的地址
建议:
如果你想打印自定义信息,你能做的就是过载,因为指针是内存中的地址。你有一张Person*和Servici*的地图。换句话说,你有一个指针地图。如果你想看到这个名字,你需要这样做。首先->getName,类似于你在rentService中所做的。你期望/想要打印什么?我有rentService p1,c1,所以rentService p1中的p1是p,c1是T。所以如果p有驾驶执照,在地图中插入此人1和他租来的车1。旁注:void printstd::map m与void printconst std::map&m一样更好,以避免在打印之前复制整个地图。旁注:在地图中使用指针作为键几乎从来都不是正确的做法,因为您没有映射到要映射到的人所在的位置。你能想象那会有多有趣吗?一个人去商店取车,被告知:不,史密斯先生。我们不能把你的车给你,因为你站在离你下车时的位置左边两英尺的地方。然后,机修工把你的车交给约翰斯顿先生,因为约翰斯顿站在正确的位置。成员功能按计划进行更改。非常感谢。不客气!不过,这需要一个朋友函数才能起作用。
void print(std::map<Person*,Servicii*> m) {
for(auto const &it: m) {
std::cout << "[" << *(it.first) << "," << *(it.second) << "]" << std::endl;
}
}
std::cout << it.first->getName() << "\n";
Car *c1=new Car("Skoda",150,true,"red",2014);
class Person {
public:
ostream& operator<<(ostream& os, Person const& person) {
return os << "I am " << person.m_name << " " << person.m_surname << endl;
}
private:
string m_name;
string m_surname;
};