Вадим Ушаков, Если функция не меняет объект, то правило хорошего тона - поставить у функции const: int f(int x) const {
Тогда ее можно будет вызывать и у const объектов. У вас же получается, что нельзя почти нигде использовать константные объекты, потому что вы на них пытаетесь вызывать не меняющие их функции, но компилятору это не видно. Вот чтобы ему было видно и надо руками проставлять const.
Вадим Ушаков, Создайте другой вопрос со всем кодом. Судя по всему, где-то не стоит const. Вы должны пометить все методы, вызываемые на const объектах, что они const.
Например x, y и add_by_number, похоже, не меняют объект.
Вадим Ушаков, Но в наследнике у него другой тип возвращаемого значения! А имя то же самое. Вот тут компилятор и офигивает. Вообще, говоря, можно иметь несколько функций с одним и тем же именем, но разными входными параметрами (перегрузка имен), но такой же фишки с типом возвращаемого значения нет. Если уж параметры и имя у виртуальной функции такие же, то извольте и возвращаемый тип не менять.
Mercury13, Это да. Надо в этой задаче забить на добавление вершин по одной и просто сразу добавить их все. А дальше у автора уже ровно как у вас расписано кэш и работает для этого массив p используется.
Это будет медленно и почти наверняка не пройдет по времени. Это же олимпиадная задача. Кстати, автор примерно так уже и делает, только с логарифмическим поднятием вверх.
Kryptonit, Можно в fillMatrix возвращать выделенную память. Тогда параметр не нужен. Или можно сделать параметр указателем на указатель на указатель. Или ссылкой на двойной указатель.
sresort, file - это этот ваш T_bit_file из которого вы читаете. Никакой ноды в restore_tree не передается. Она создает внутри новую вершину и возвращает ее.
sresort, Функция restore_tree возвращает корень поддерева. В функции, если прочли 1 - создали лист, заполнили символ, вернули. Иначе создаем лист и рекурсивно заполняем его детей. Буквально:
bit = readbit();
if (bit) {
data = ...;
return new Node(data);
}
Node* node = new Node();
node->left = restore_tree(file);
node->right = restore_tree(file);
return node;
int f(int x) const {Тогда ее можно будет вызывать и у const объектов. У вас же получается, что нельзя почти нигде использовать константные объекты, потому что вы на них пытаетесь вызывать не меняющие их функции, но компилятору это не видно. Вот чтобы ему было видно и надо руками проставлять const.