объявить массив константных целых в C ++

Объекты в 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
задан Juan Besa 30 May 2009 в 01:47
поделиться

4 ответа

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, ... };

Возможно, вы уже захотите зафиксировать массив в определении класса, но это не обязательно. Массив будет иметь полный тип в момент определения (который должен находиться в файле .cpp, а не в заголовке), где он может определить размер из инициализатора.

24
ответ дан 1 December 2019 в 19:02
поделиться
enum Masks {A=0,B=1,c=3,d=5,e=7};
2
ответ дан 1 December 2019 в 19:02
поделиться
// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
9
ответ дан 1 December 2019 в 19:02
поделиться
  1. вы можете инициализировать переменные только в конструкторе или других методах.
  2. «статические» переменные должны быть инициализированы вне определения класса.

Вы можете сделать это:

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, .... };
2
ответ дан 1 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: