所以我正在做一个按距离和时间对司机进行排序的项目。目前,我有一个重载的构造函数,基于输入创建一个新对象,并将它们存储到向量中。然后,我还调用了具有驱动程序名称的类中的字符串的 setName(( 函数。
稍后,我需要识别一个 trip 命令,然后从向量中提取对象。我用来执行此操作的代码如下。
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;}
我目前的输出给了我空行作为输出。思潮?
修改驱动程序名称集函数,如下所示:
void Driver::setDriverName(string n) {driverName = n;}
请注意,您不能为函数的参数赋值并希望了解正在发生的事情,除非通过引用传入:-(。
当你Driver tempObj = *i;
时复制一个Driver
,这些对象之间没有进一步的关联。在未显示填充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");
}