问题描述
cout << ((*i)->getFirstName());
上下文
class Employee{
private:
string FirstName;
public:
Employee(string FirstName);
void setFirstName(string FName) {
FirstName = FName;
}
string getFirstName(){
return FirstName;
}
} //End of Class
在主要(已设置名字并已填写员工)
vector<Employee *> Employees;
Employees.push_back(new Employee(FirstName));
for (vector<Employee *>::iterator i = Employees.begin(); i < Employees.end(); i++) {
cout << ((*i)->getFirstName());
}
我的问题是为什么上面的行有效而不是以下任何一条?
cout << Employee[*i]->getFirstName();
cout << Employee[i]->getFirstName();
cout << *i->getFirstName();
解决方法
i
是迭代器对象,而不是数字索引,因此 Employee[i]
和 Employee[*i]
都是错误的(如您所见)。
关于 *i->getFirstName()
与 (*i)->getFirstName()
,->
运算符比 *
运算符具有 higher precedence。所以 *i->getFirstName()
会被解释为好像你写了 *(i->getFirstName())
,即“在 getFirstName()
上执行 i
方法,然后取消引用结果”。因为 i
是一个迭代器,并且没有 getFirstName()
方法,这不会编译。另一方面,(*i)->getFirstName()
将被解释为“取消引用 i
迭代器以获取 { {1}},然后在它指向的对象上执行 Employee*
方法”,这是您试图获得的行为。