Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
VoodooPuppet
Заблокирован
#1

Вызов не константной функции, изменяющей свойства класса, из константой . Возможно? - C++

06.04.2015, 11:58. Просмотров 440. Ответов 6
Метки нет (Все метки)

Сразу к делу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <QCoreApplication>
 
class Base
{
public:
    Base();
    virtual int DoSomething(const int& var) const = 0;
};
 
class Child : public Base
{
public:
    Child();
    virtual int DoSomething(const int& var) const;
    void SubFunc();
 
private:
    int myProperty;
};
 
int Child::DoSomething(const int &var) const
{
    SubFunc();
    return myProperty;
}
 
void Child::SubFunc()
{
    myProperty = 5;
}
Строка '23' - ошибка:
C:\Projects\test\untitled1234\main.cpp:23: ошибка: passing 'const Child' as 'this' argument of 'void Child::SubFunc()' discards qualifiers [-fpermissive]
SubFunc();
Компилятор - minGW. (причём в случае с компилятором MSVS я могу в дочернем классе просто суфикс const убрать из декларации функции и всё, а в minGW так не прокатывает)

Это разумеется просто имитация ситуации. В моём случае базовый класс я отредактировать не могу, но мне нужно реализовать в его дочернем классе его константную виртуальную функцию, которая будет кое - что изменять, в этом классе.
http://www.cyberforum.ru/cpp-beginners/thread2184472.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2015, 11:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вызов не константной функции, изменяющей свойства класса, из константой . Возможно? (C++):

Возможно ли корректно увеличить память для свойства класса, заданного указателем?
Всем привет. Вопрос скорее &quot;из интереса&quot;, но меня он мучает! 1. Объект...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание -...

Асинхронный вызов функции, возможно через другой поток
Привет! Есть какой - то класс, содержащий какое-то поле (переменную) и какую -...

Вызов функции из класса
есть функция объявленная в классе Calendar void calendar::menu_k() {...

Вызов функции вне класса
Есть класс, в нем два метода. В одном из них надо вызвать функцию, которая...

6
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,919
Записей в блоге: 3
Завершенные тесты: 1
06.04.2015, 12:07 #2
Если изменять будет в дочернем классе, то mutable может помочь.
1
VoodooPuppet
Заблокирован
06.04.2015, 12:36  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
то mutable может помочь.
А куда это вставить - то ? В декларацию переменной ?

Добавлено через 6 минут
делаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <QCoreApplication>
 
class Base
{
public:
    Base();
    virtual int DoSomething(const int& var) const = 0;
};
 
class Child : public Base
{
public:
    Child();
    virtual int DoSomething(const int& var) const;
    void SubFunc();
 
private:
    mutable int myProperty;
};
 
int Child::DoSomething(const int &var) const
{
    SubFunc();
    return myProperty;
}
 
void Child::SubFunc()
{
    myProperty = 5;
}
и особо ничего не меняется:
C:\Projects\test\untitled1234\main.cpp:-1: In member function 'virtual int Child::DoSomething(const int&) const':
C:\Projects\test\untitled1234\main.cpp:23: ошибка: passing 'const Child' as 'this' argument of 'void Child::SubFunc()' discards qualifiers [-fpermissive]
SubFunc();
^
Добавлено через 2 минуты
На самом деле компилятор ругается на то, что мол я такой сякой, вызываю не константную функцию внутри константной ...
Как же быть ...
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.04.2015, 12:37 #4
Лучший ответ Сообщение было отмечено VoodooPuppet как решение

Решение

SubFunc делаете костантной функцией, myProperty mutable.
1
VoodooPuppet
Заблокирован
06.04.2015, 12:43  [ТС] #5
Цитата Сообщение от ForEveR Посмотреть сообщение
SubFunc делаете костантной функцией, myProperty mutable.
Спасибо! Но тут очередная глупость какая - то вылезает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <QCoreApplication>
 
class Base
{
public:
    Base();
    virtual int DoSomething(const int& var) const = 0;
};
 
class Child : public Base
{
public:
    Child();
    virtual int DoSomething(const int& var) const;
    void SubFunc() const;
 
private:
    mutable int myProperty;
};
 
int Child::DoSomething(const int &var) const
{
    SubFunc();
    return myProperty;
}
 
void Child::SubFunc() const
{
    myProperty = 5;
}
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    Base* b = new Child;
    b->DoSomething(0);
 
    return a.exec();
}
Строка 36:
C:\Projects\test\untitled1234\main.cpp:36: ошибка: undefined reference to `Child::Child()'
collect2.exe:-1: ошибка: error: ld returned 1 exit status
0
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,919
Записей в блоге: 3
Завершенные тесты: 1
06.04.2015, 12:49 #6
Объявление конструктора без параметров есть, а реализации нет.
1
VoodooPuppet
Заблокирован
06.04.2015, 12:51  [ТС] #7
А... не важно, главное что в основном проекте всё заработало ...
Всем спасибо
0
06.04.2015, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2015, 12:51
Привет! Вот еще темы с решениями:

Вызов функции в шаблоне класса
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции....

Вызов функции класса по каллбеку
Хочу реализовать возможность вызова метода класса по каллбеку. Сделал такой...

вызов статичной функции класса
Добрый день. Не могу изменить класс так, чтобы можно было вызывать функцию...

Вызов функции по указателю из класса
Такой расклад. Допустим имеем код: #include &lt;iostream&gt; using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru