Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
1

Установить значение переменной из другого класса

29.11.2013, 19:10. Показов 5681. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здрасьте.
У меня есть 3 класса.Почти не как от друга не зависят.
На скрине показана схемка.
Так вот , в классе MENU у меня есть переменная name_slot типа LPCWSTR.
Так же есть в классе функция взятие этой переменной:
C++
1
2
3
4
LPCWSTR MenuClass::GetName()
{
    return name_slot;
}
Мне нужно ей присвоить значение в классе CONF через класс ENGINE(схемка в помощь).
Класс Conf у меня читает информацию с файла , которую надо записать в переменную name_slot.
Вот функция в CONF классе :
C++
1
2
3
4
5
6
7
void Initialize(LPCWSTR &name)
{
    ifstream in;
.......
    in >> name;
.......
}
Так , осталось только в классе Engine вызвать функцию Initialize.

Вот код с Engine Class :
C++
1
2
3
4
5
6
7
8
9
10
11
void NameFunc()
{
    MenuClass* menu;
    menu = new MenuClass;
........
    ConfClass* conf;
    conf = new ConfClass;
........
    conf->Initialize(menu->GetName());
     
}
Тут он у меня ругается на menu->GetName().
"Начальное значение ссылки на неконстантный параметр должно быть левосторонним значением".

Подскажите в чём проблема , или способ сделать это легче.
Миниатюры
Установить значение переменной из другого класса  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2013, 19:10
Ответы с готовыми решениями:

Получить значение переменной из другого класса
Доброго времени суток, помогите пожалуйста разобраться. Есть класс в котором хранится переменная,...

Получить значение переменной из другого класса
Добрый день! Делаю простенькие часики и столкнулся со следующей проблемой: внутри класса значение...

Взятие значение переменной из другого класса.
- Здравствуйте. Что-то мне подсказывает, что моя проблема слишком детская. Но так уж и быть, спрошу...

Получить значение переменной из метода другого класса
Всем привет! Помогите, пожалуйста, с небольшим вопросом. Вот простой код, состоящий из 3-х...

21
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 19:33 2
BeginerMan, я не сильно глубоко шарю, но подозреваю, что вся проблема зарыта в том, что GetName() возвращает объект, который скорее всего находится в поле private, а функция Initialize ожидает ссылку на этот объект, то есть ожидается возможность изменения возвращаемого объекта. Не хорошо как-то. Это была первая гипотеза.
Вторая состоит в том, что где-то в промежутке между ретурном и получением ссылки на объект есть какой-нибудь оператор копирования, который не разрешит нам так сделать(ну для стандартных типов операторов быть не может, потому не знаю как объяснить). Короче, я просто не сильно понимаю что происходит в момент возврата значения и на что должна указывать ссылка. как-то так
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 19:54 3
Если так:
C++
1
2
3
4
5
6
7
void Initialize(LPCWSTR name)
{
    ifstream in;
.......
    in >> name;
.......
}
Добавлено через 9 минут
Только как вы собираетесь в константу читать?
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 20:10 4
alsav22, никак, я не предлагал решение) я сказал возможные места проблемы)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:14 5
metaluga145, я ТС вопрос задал.
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:15  [ТС] 6
metaluga145, нет , в public'е весит эта функция.
alsav22, убрал & , таже проблема, таже ошибка.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:20 7
Цитата Сообщение от BeginerMan Посмотреть сообщение
убрал & , таже проблема, таже ошибка.
Что-то не так... Таже уже не может быть, ссылки ведь уже нет.

Добавлено через 1 минуту
Прототипы функций есть в классе?
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:22  [ТС] 8
metaluga145, смотрите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
    int c, d;
    Calc(c,d);
    cout << c << d;
    Тут c выйдет 3, а d выйдет 4
    return;
}
 
void calc(int& a, int& b)
{
    a = 3;
    b = 4;
}
Таким же способом я хочу присвоить значение из conf в переменную name_slot;

Добавлено через 29 секунд
Прототипов нет.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:23 9
На какую строку компилятор показывает?

Добавлено через 1 минуту
Цитата Сообщение от BeginerMan Посмотреть сообщение
metaluga145, смотрите:
BeginerMan, вы не отвлекайтесь, с одним вопросом сначала разберитесь.
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:24  [ТС] 10
А , стопэ , у меня ноут лагнул , извиняюсь , убрал ссылку , стало теперь нормально.
НО!!!
мне нужно , чтобы я мог использовать переменную name_slot в классе Menu.
А так я только передаю значение в класс Conf.

Добавлено через 39 секунд
Цитата Сообщение от BeginerMan Посмотреть сообщение
conf->Initialize(menu->GetName());
На эту.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:25 11
Цитата Сообщение от BeginerMan Посмотреть сообщение
мне нужно , чтобы я мог использовать переменную name_slot в классе Menu.
И что мешает? И на вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
Только как вы собираетесь в константу читать?
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 20:27 12
BeginerMan, есть такая штука, как friend классы. можете почитать про это. это должно решить проблему, но вообще плохо, когда один класс умеет лазить во внутренности другого)
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:34  [ТС] 13
metaluga145, я знаю про friend. не хочу из-за одной переменной ломать систему.

Добавлено через 5 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
только как вы собираетесь в константу читать?
А если изменю на LPWSTR , что-то измениться ?
Я и забыл что LPCWSTR это константа ...
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 20:34 14
BeginerMan, можете создать set-функцию, которая будет устанавливать значение данной переменной. По другому врядли можно сделать.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:36 15
Цитата Сообщение от BeginerMan Посмотреть сообщение
Так вот , в классе MENU у меня есть переменная name_slot типа LPCWSTR.
Цитата Сообщение от BeginerMan Посмотреть сообщение
мне нужно , чтобы я мог использовать переменную name_slot в классе Menu.
Как это всё понимать?

Добавлено через 1 минуту
Цитата Сообщение от BeginerMan Посмотреть сообщение
А если изменю на LPWSTR , что-то измениться ?
Изменится, только поток создавайте для широких символов.
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:39  [ТС] 16
Цитата Сообщение от alsav22 Посмотреть сообщение
мне нужно , чтобы я мог использовать переменную name_slot в классе Menu.
И что мешает?
Ну так , передавая значение из первой функции во вторую функцию, без ссылки, я не смогу сделать так , чтобы в первой функции он принял то значение, которое было присвоено во второй.

Добавлено через 1 минуту
Так стоп , я сейчас объясню подругому , а то так до ночи дойдёт.

Добавлено через 37 секунд
metaluga145, да да , я уже начал работать над этим , но я хочу разобраться с этим.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:42 17
Вы передаёте указатель, а не просто переменную. Все изменения того, что содержится по этому указателю, сохранятся. Единственное что нельзя сделать, это изменить значение самого указателя (для этого нужна ссылка на указатель).

Добавлено через 1 минуту
Вам же содержание строки, с которой связан этот указатель, нужно менять?
0
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:44  [ТС] 18
В классе Menu есть переменная name_slot типа LPWSTR. Я хочу её вывести на экран. Но мне выдаст ошибку : "Переменная name_slot без инициализации.". Так вот , это переменную мне надо инициализировать в другом классе , в данном случае Conf
Я уже приводил пример:

Цитата Сообщение от BeginerMan Посмотреть сообщение
void main()
{
int c, d;
Calc(c,d);
cout << c << d;
Тут c выйдет 3, а d выйдет 4
return;
}
void calc(int& a, int& b)
{
a = 3;
b = 4;
}
Если думать что c и d это не int а LPWSTR.

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Вам же содержание строки, с которой связан этот указатель, нужно менять?
Да да , эту строку , которую я передаю , нужно ей присвоить значение в функции Initialize в классе Conf
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:47 19
Цитата Сообщение от BeginerMan Посмотреть сообщение
Если думать что c и d это не int а LPWSTR.
С какой стати это думать? Передавайте адреса переменных, тогда это будет похоже на LPWSTR.

Добавлено через 1 минуту
Цитата Сообщение от BeginerMan Посмотреть сообщение
Да да , эту строку , которую я передаю , нужно ей присвоить значение в функции Initialize в классе Conf

Не по теме:

Это уже начинает надоедать...


Присваивайте, что мешает? Память под указатель выделена?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.11.2013, 20:51 20
alsav22, у него там похоже неинициализированная ссылка болтается полем класса.
BeginerMan, а вообще такие косвенные зависимости "изменили в одном месте - огребли в другом" ни к чему хорошему не приводят.

Добавлено через 2 минуты
Хотя черт его знает... Автор, минимальный и достаточный пример, на котором воспроизводится ошибка - в студию.
0
29.11.2013, 20:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2013, 20:51
Помогаю со студенческими работами здесь

Как получить значение переменной из другого класса?
Вопрос достаточно простой на первый взгляд, но я чет никак не могу сообразить как его решить:(...

Как вызвать значение переменной из другого класса?
у меня есть следующий код: class London { public void Start(){ int k; k =...

Получить значение non-static переменной из другого класса
Вопрос конечно дурацкий. Но долго искал ответ и так и не нашел. Имеется класс с нестатической...

Как присвоить значение из JTextField переменной другого класса?
Подскажите как присвоить значение из JTextField для переменной другого класса. У меня есть класс...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru