如何解决为什么 ((*i)->getFirstName()) 有效,而不是 *i->getFirstName() 或 Employee[*i]getFirstName()?
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*
方法”,这是您试图获得的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。