Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2018, 16:56   #1
novuiPolzovatel
 
Регистрация: 29.03.2012
Сообщений: 8
По умолчанию Конструктор копирования

Код:
class symb {
private:
       int A;
public:
    symb() {}
    symb(const symb &X) {
        X.show();
    }
    void show() {
        cout << "123";
    }
 
};
void main() {
    symb C;
    symb B = C;
}
Компилятор строку 7 подчёркивает красным и пишет: error C2662: void symb::show(void): невозможно преобразовать указатель "this" из "const symb" в "symb &"
error C2662: void symb::show(void): невозможно преобразовать указатель "this" из "const symb" в "symb &"
объект содержит квалификаторы типа, несовместимые с членом функцию "symb ::show" тип объекта: const symb


Почему нельзя получить доступ к функции show() объекта C из конструктора копирования?
И ещё: почему из функции main нельзя получить доступ к переменной A объекта C (что логично, она ведь private), а из конструктора копирования, который вызывается для объекта B - можно?

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 24.10.2018 в 16:59.
novuiPolzovatel вне форума Ответить с цитированием
Старый 24.10.2018, 17:01   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

show не const.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.10.2018, 17:03   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
Сообщение от novuiPolzovatel Посмотреть сообщение
Почему нельзя получить доступ к функции show() объекта C из конструктора копирования?
Неправильный постановка. Вы пытаетесь вызвать на константном объекте неконстантную функцию.

Цитата:
Сообщение от novuiPolzovatel Посмотреть сообщение
И ещё: почему из функции main нельзя получить доступ к переменной A объекта C (что логично, она ведь private), а из конструктора копирования, который вызывается для объекта B - можно?
В мейне нельзя потому что приват. Из конструктора можно, т.к. класс имеет доступ к своим полям.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор копирования Drago56 Общие вопросы C/C++ 6 13.10.2013 10:54
конструктор копирования revaldo666 Общие вопросы C/C++ 10 21.06.2011 22:42
Конструктор копирования Сtrl Общие вопросы C/C++ 6 31.03.2011 10:18
Конструктор копирования DartDayring Общие вопросы C/C++ 4 16.11.2010 17:46
Конструктор копирования Djaconda Общие вопросы C/C++ 3 11.06.2008 18:54