晚上好,
我正在處理一段過去使用 std::set 可以很好地作業的代碼。
但是,由于需要物件之間的固有順序,我將不得不將其轉換為向量。
我在迭代所述向量的元素時遇到了一些問題,而當它被定義為 std::set 時,一切都運行良好。
該向量被定義為以下 Manager 類的屬性,如下所示:
class Manager : public Citizen {
std::vector<Employee*> employees;
此 Manager 類使用以下簽名覆寫其父類的純虛擬列印方法:
std::ostream& printLong(std::ostream& os) const override;
方法實作如下:
std::ostream& Manager::printLong(std::ostream& os) const {
// Personal info
os << this->first_name << " " << this->last_name << endl;
os << "id - " << this->id_number << " ";
os << "birth_year - " << this->birth_year << endl;
os << "Salary: " << this->salary << endl;
// Do not print employees in case there are none
if (this->employees.empty()) {
return os;
}
// Employee info
os << "Employees:" << endl;
std::vector<Employee*>::iterator i = this->employees.begin();
while (i != employees.end()) {
Employee* current_employee = (*i);
current_employee->printShort(os);
i;
}
return os;
}
有問題的行是:
std::vector<Employee*>::iterator i = this->employees.begin();
VSCode 拋出以下錯誤:
no suitable user-defined conversion from "__gnu_cxx::__normal_iterator<mtm::Employee *const *, std::vector<mtm::Employee *, std::allocator<mtm::Employee *>>>" to "__gnu_cxx::__normal_iterator<mtm::Employee **, std::vector<mtm::Employee *, std::allocator<mtm::Employee *>>>" existsC/C (312)
為什么這不起作用?我能做些什么來解決這個問題?
值得一提的是,這是不允許使用 auto 的課程問題的一部分。
或者,如果您認為使用向量不是一個選項,我想要完成的是維護元素之間的順序,以便我可以根據用戶如何將它們添加/洗掉到員工串列中來列印它們。
uj5u.com熱心網友回復:
this是指向 的指標const Manager,this->employees.begin();回傳std::vector<Employee*>::const_iterator。修復:
// std::vector<Employee*>::iterator i = this->employees.begin();
std::vector<Employee*>::const_iterator i = this->employees.begin();
甚至更好
auto i = this->employees.begin();
uj5u.com熱心網友回復:
您是begin()從一個const方法呼叫的,因此employeesconst 也是如此,這意味著begin()被選中的多載回傳 a std::vector<Employee*>::const_iterator,而不是std::vector<Employee*>::iterator。相應地更改您的變數宣告:
std::vector<Employee*>::const_iterator i = this->employees.begin();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/410164.html
標籤:
