Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
#1

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

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

Всем здрасьте.
У меня есть 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().
"Начальное значение ссылки на неконстантный параметр должно быть левосторонним значением".

Подскажите в чём проблема , или способ сделать это легче.
Миниатюры
Установить значение переменной из другого класса  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 19:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Установить значение переменной из другого класса (C++):

обратиться к переменной другого класса - C++
Есть класс и в нем объявлены переменные, можно ли их записать в другом классе и работать с ними в начальном классе? table.h #ifndef...

Получения доступа к переменной другого класса - C++
Нужно получить доступ к переменным x и y класса Field из класса Snake. Как это сделать? // "Змейка V0.1" #include <iostream> ...

Разное значение переменной класса, в разных экземплярах класса - C++
Вот примерный код: class Test { private: static int countC; static int countD; void initWeight(){ double a; ...

Почему изменяется значение переменной между функциями класса? - C++
Почему-то изменяется значение переменной m(кол-во специальностей) в output_spec. Пробовал в других средах покомпилить, но m все равно...

Приём константных векторов класса, как аргументов в методе другого класса - C++
Есть такой класс: class Order { private: int numberOrder; map <string, int> catalogDish; double totalCost; public: ...

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится "...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 19:33 #2
BeginerMan, я не сильно глубоко шарю, но подозреваю, что вся проблема зарыта в том, что GetName() возвращает объект, который скорее всего находится в поле private, а функция Initialize ожидает ссылку на этот объект, то есть ожидается возможность изменения возвращаемого объекта. Не хорошо как-то. Это была первая гипотеза.
Вторая состоит в том, что где-то в промежутке между ретурном и получением ссылки на объект есть какой-нибудь оператор копирования, который не разрешит нам так сделать(ну для стандартных типов операторов быть не может, потому не знаю как объяснить). Короче, я просто не сильно понимаю что происходит в момент возврата значения и на что должна указывать ссылка. как-то так
alsav22
5417 / 4813 / 442
Регистрация: 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 минут
Только как вы собираетесь в константу читать?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
29.11.2013, 20:10 #4
alsav22, никак, я не предлагал решение) я сказал возможные места проблемы)
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:14 #5
metaluga145, я ТС вопрос задал.
BeginerMan
49 / 48 / 5
Регистрация: 17.11.2012
Сообщений: 427
29.11.2013, 20:15  [ТС] #6
metaluga145, нет , в public'е весит эта функция.
alsav22, убрал & , таже проблема, таже ошибка.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:20 #7
Цитата Сообщение от BeginerMan Посмотреть сообщение
убрал & , таже проблема, таже ошибка.
Что-то не так... Таже уже не может быть, ссылки ведь уже нет.

Добавлено через 1 минуту
Прототипы функций есть в классе?
BeginerMan
49 / 48 / 5
Регистрация: 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 секунд
Прототипов нет.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 20:23 #9
На какую строку компилятор показывает?

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от BeginerMan Посмотреть сообщение
А если изменю на LPWSTR , что-то измениться ?
Изменится, только поток создавайте для широких символов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 20:36
Привет! Вот еще темы с ответами:

Как получить private переменную класса, функцей членом другого класса - C++
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: int FIELD_START; int...

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка &quot; нестандартный...

Использование в качестве поля класса указатель на объект другого класса - C++
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс person (человек) и car (модель машины). ...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.11.2013, 20:36
Ответ Создать тему
Опции темы

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