【发布时间】:2014-01-25 17:46:06
【问题描述】:
#include "Visit.h"
class Patient
{
private:
std::string name;
std::string IC;
List<Visit> *visitList;
List<MC> mcList;
public:
Patient();
Patient(std::string, std::string);
void addVisit(Visit);
List<Visit> *getVisitList();
};
//End of Patient.h
#include "Patient.h"
Patient::Patient()
{
visitList = new List<Visit>();
}
Patient::Patient(std::string ic, std::string n) : name(n), IC(ic)
{
visitList = new List<Visit>();
}
void Patient::addVisit(Visit v)
{
visitList->add(v);
}
List<Visit> * Patient::getVisitList()
{
return visitList;
}
//End of Patient.cpp
class Visit
{
private:
__int64 time;
double cost;
bool xRayStatus = false;
public:
Visit();
Visit(__int64, double);
void addXRay();
bool getXRayStatus();
};
//End of Visit.h
#include "Visit.h"
Visit::Visit() {
}
Visit::Visit(__int64 t, double c) : time(t), cost(c) {
}
void Visit::addXRay()
{
xRayStatus = true;
}
bool Visit::getXRayStatus()
{
return xRayStatus;
};
//End of Visit.cpp
int main()
{
int pos;
Visit v(/*current time, cost*/);
Patient p()
unordered_map<string, Patient> patientMap;
string IC;
getline(cin,IC);
Patient p(IC, "John");
patientMap.insert({IC, p});
Patient *pc;
Visit *vc;
pos = patientMap[IC].getVisitList()->getLength();
pc = &patientMap[IC];
pc->addVisit(v); //Debugger shows patientMap[IC].getVisitList()->getLength() becomes 2
pc->getVisitList()->get(pos).addXRay(); //patientMap[IC].getVistList()->get(0).getXRayStatus() still false
vc = &patientMap[IC].getVisitList()->get(pos);
vc->addXRay(); //patientMap[IC].getVistList()->get(0).getXRayStatus() still false
}
如何使 getXRayStatus 为真?我可以将项目添加到列表中但不能执行其他功能,例如 vc->addXRay,这对我来说似乎很奇怪。 vc 本身显示为 true,但更改未反映在我的地图上。 pc 能够以某种方式添加访问并在地图上显示更改。
【问题讨论】:
-
关于标题中的问题,让指针指向另一个对象?
-
你的
List班级坏了吗? (即它的get()按值返回?) -
@KerrekSB 我的 List 类是通过指针实现的。 get() 返回节点->item;
-
@KateGregory 有没有办法更改这些虚拟副本?
-
@KateGregory 是的,由于这个虚拟副本问题,我遇到了地狱。如果不更改我的 List 类,我能做些什么吗?我有程序的其他部分使用它。我的 X 射线正在就诊中,因为患者可能有多次就诊和治疗,条件都在该就诊对象中。
标签: c++ object pointers reference