MySql - ВЫБРАТЬ столбец TimeStamp в формате UTC

Объекты в std::set сохраняются как const StudentT. Поэтому, когда вы пытаетесь вызвать getId() с объектом const, компилятор обнаруживает проблему, в основном вы вызываете функцию не-const-члена в const-объекте, которая не разрешена, поскольку не-константные функции-члены не делают НИКАКИХ ОБЯЗАТЕЛЬНО не изменить объект; поэтому компилятор должен сделать предположение safe , что getId() может попытаться изменить объект, но в то же время он также замечает, что объект является const; поэтому любая попытка изменить объект const должна быть ошибкой. Следовательно, компилятор генерирует сообщение об ошибке.

Решение прост: сделайте функции const такими как:

int getId() const {
    return id;
}
string getName() const {
    return name;
}

Это необходимо, потому что теперь вы можете вызывать getId() и getName() для объектов const как:

void f(const StudentT & s)
{
     cout << s.getId();   //now okay, but error with your versions
     cout << s.getName(); //now okay, but error with your versions
}

В качестве побочного элемента вы должны реализовать operator< как:

inline bool operator< (const StudentT & s1, const StudentT & s2)
{
    return  s1.getId() < s2.getId();
}

. Параметры примечаний теперь const.

13
задан Michel 9 October 2011 в 13:22
поделиться