所以我正在研究一个按距离和时间对驾驶员进行排序的项目。目前,我有一个重载的构造函数,它基于输入创建新对象并将其存储到向量中。然后,我还要在setName()函数中调用类中具有驱动程序名称的字符串。
稍后,我需要识别一个跳闸命令,然后从矢量中拉出对象。我用于执行此操作的代码如下。
for (vector<Driver>::iterator i = drivers.begin(); i != drivers.end(); i++) {
Driver tempObj = *i;
string temp = tempObj.getName();
cout << temp << endl;
}
下面是我的setName()和getName()代码
string Driver::getName() { return driverName; }
void Driver::setDriverName(string n) {n = driverName;}
我当前的输出是输出空行。有想法吗?
答案 0 :(得分:1)
按如下所示修改您的driverName设置函数:
void Driver::setDriverName(string n) {driverName = n;}
请注意,您不能将值分配给函数的参数,并且希望了解发生的事情,除非通过引用将其传递给:-)。
答案 1 :(得分:0)
您Driver
复制 Driver tempObj = *i;
时,这些对象之间没有进一步的关联。在填充drivers
的位置未显示的代码中,您可能会执行类似的操作。
您的setDriverName
无效,它所做的只是修改立即不再存在的字符串的副本。
void Driver::setDriverName(string n) {n = driverName;}
您可以引用它们,而不是复制您的Driver
。
for (auto & driver : drivers) {
string name = driver.getName();
std::cout << name << std::endl;
driver.setName("New Name");
}