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

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

Войти
Регистрация
Восстановить пароль
 
 
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
#1

Передача значения переменной по ссылке - C++

14.10.2013, 14:34. Просмотров 523. Ответов 18
Метки нет (Все метки)

Есть событие, которое происходит в методе someMethod, при выполнении которого программа вылетает.

Методу someMethod нужно получить переменную currentNumberOfBeaver с помощью ссылок и указателей.
Если передавать по аргументу через функцию-геттер, то не вылетает. Что я не так с указателями сделал?


//C_Events.cpp
C++
1
2
3
4
5
6
#include "C_Events.h"
void someMethod() {
    // Здесь ошибка вылетает
    if(*o_C_DravScene_C_Events -> getCurrentNumberOfBeavers() == beaver_00)
        makeBeaverRed(30, 180, p, pli);
}
//C_Events.h
C++
1
2
3
4
5
#include "C_DravScene.h"
class C_Events {
    C_DrawScene* o_C_DravScene_C_Events;
    enum numberOfBeaver {beaver_00};
};
//C_DravScene.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct C_DravScene {
        inline void generateCurrentNumberOfBeaver() {
        srand((unsigned int)time(0));
        currentNumberOfBeaver = rand() % (15);
    }
 
    inline int* getCurrentNumberOfBeavers()
        { return &currentNumberOfBeaver; }
 
  private:
 
      int currentNumberOfBeaver;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 14:34     Передача значения переменной по ссылке
Посмотрите здесь:

Передача значения по ссылке - C++
1. Объявите (в отельном заголовочном файле) и реализуйте (в другом файле) процедуры (они не возвращают значений!) согласно варианту. 2....

Передача значения по ссылке - C++
Даны два файла: fun.cpp: #include <math.h> double summa(float x, float eps, double& psl, int& k) { double s=0, sl=1/x, psl=0; int...

Передача значения переменной в IplImage - C++
Есть данные в файле с названием изображений которые нужно рассматривать. Данные названия получаю таким образом: std::string file1,file2; ...

Передача значения переменной из одной формы в другую - C++
собственно, название темы говорит само за себя) пишу, мол, #include <vcl.h> #pragma hdrstop #include "Unit10.h" ...

Передача значения переменной-члена из класса в функцию - C++
Добрый день, имеется класс: class ZernPole{ public: ZernPole(int Zerno) { zpZerno=Zerno;...

Передача значения переменной из родительского класса в дочерний - C++
Приветствую. Есть код: class ychebnik { protected: int A; public: ychebnik(){}; void setDate(int a)

Передача параметров по ссылке - C++
Вот задание: С клавиатуры вводится число, передается в вызываемую функцию, в ней найти сумму делителей и их число. Результат работы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
14.10.2013, 14:37     Передача значения переменной по ссылке #2
(*o_C_DravScene_C_Events) -> getCurrentNumberOfBeavers() == beaver_00)
попробуй там скобки, приоритеты разные вроде у == и *

или (*o_C_DravScene_C_Events -> getCurrentNumberOfBeavers()) == beaver_00)
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 14:42  [ТС]     Передача значения переменной по ссылке #3
Цитата Сообщение от dzrkot Посмотреть сообщение
(*o_C_DravScene_C_Events) -> getCurrentNumberOfBeavers() == beaver_00)
Если так сделать, то пишет, что выражение должно иметь тип указателя

C++
1
((*o_C_DravScene_C_Events -> getCurrentNumberOfBeavers()) == beaver_00)
А если так, ничего не изменяется
Tulosba
14.10.2013, 14:57
  #4

Не по теме:

поубивал бы за такие идентификаторы

dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 15:15  [ТС]     Передача значения переменной по ссылке #5
Цитата Сообщение от Tulosba Посмотреть сообщение
поубивал бы за такие идентификаторы
спасибо за неоценимую помощь..
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 15:26     Передача значения переменной по ссылке #6
Цитата Сообщение от dimakozyr Посмотреть сообщение
спасибо за неоценимую помощь..
Пожалуйста. Только вот спасибо тут иначе выражают.
Цитата Сообщение от dimakozyr Посмотреть сообщение
int* getCurrentNumberOfBeavers()
Почему возвращает указатель? Судя по названию должно возвращать число.
Цитата Сообщение от dimakozyr Посмотреть сообщение
// Здесь ошибка вылетает
Какая ошибка? Указатель o_C_DravScene_C_Events вообще инициализирован? Где код инициализации?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 16:26  [ТС]     Передача значения переменной по ссылке #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему возвращает указатель? Судя по названию должно возвращать число.
Так и есть. Убрал указатель. Я просто в указателях не сильно шарю

Цитата Сообщение от Tulosba Посмотреть сообщение
Какая ошибка?
Нарушение прав доступа при чтении по адресу

Цитата Сообщение от Tulosba Посмотреть сообщение
Указатель o_C_DravScene_C_Events вообще инициализирован? Где код инициализации?
Вот, в классе C_Events:
C++
1
C_DrawScene* o_C_DravScene_C_Events;
Миниатюры
Передача значения переменной по ссылке  
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 16:38     Передача значения переменной по ссылке #8
dimakozyr, инициализация, это когда объекту присваивается значение.
Где код вида:
C++
1
o_C_DravScene_C_Events = нечто;
?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 16:42  [ТС]     Передача значения переменной по ссылке #9
Цитата Сообщение от Tulosba Посмотреть сообщение
инициализация, это когда объекту присваивается значение.
Где код вида:
Код C++
1
o_C_DravScene_C_Events = нечто;
Я понимаю. Под инициализацией экземпляра класса подразумевается конструктор?
Если да, то вот:
C++
1
2
C_DrawScene() : currentNumberOfBeaver(0) { generateCurrentNumberOfBeaver(); }
C_DrawScene(int crrntnmbrbvr) : currentNumberOfBeaver(crrntnmbrbvr) {}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 16:47     Передача значения переменной по ссылке #10
Пф-ф ... констуктор C_Events есть?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 17:21  [ТС]     Передача значения переменной по ссылке #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Пф-ф ... констуктор C_Events есть?
Да, вот они:
C++
1
2
3
4
5
6
7
8
9
10
11
12
C_Events() : x(0), y(0), w(0), h(0),
                   currentCounter(0),
                   totalCounter(0),
                   timeToStartScreenContinue(false),
                   timeToStartScreenGameOver(false) {}
 
 C_Events(int xParam, int yParam, int wParam, int hParam)
         : x(xParam), y(yParam), w(wParam), h(hParam) {
                 o_rect_C_Events.x = x;     o_rect_C_Events.y = y;
                 o_rect_C_Events.w = w;     o_rect_C_Events.h = h;
                 loadTotalCounter();
 }
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 17:51     Передача значения переменной по ссылке #12
dimakozyr, и где тут инициализация поля o_C_DravScene_C_Events ?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 17:57  [ТС]     Передача значения переменной по ссылке #13
Цитата Сообщение от Tulosba Посмотреть сообщение
dimakozyr, и где тут инициализация поля o_C_DravScene_C_Events ?
Я все экземпляры инициализирую конструктором по умолчанию:

C++
1
2
3
C_DravScene {
    C_DrawScene() : currentNumberOfBeaver(0) { generateCurrentNumberOfBeaver(); }
}
Например, как здесь:
C++
1
2
3
4
5
6
7
8
class C_Events {
  public:
      C_InitSurfaces o_C_InitSurfaces_C_Events;
      C_LoadImages     o_C_LoadImages_C_Events;   
      C_DrawScene*      o_C_DravScene_C_Events;
      C_Blitting         o_C_Blitting_C_Events;
      C_Music                o_C_Muic_C_Events;
};
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.10.2013, 18:03     Передача значения переменной по ссылке #14
dimakozyr, я сто раз должен что ли попросить код, где инициализация нужной переменной идет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2013, 18:09     Передача значения переменной по ссылке
Еще ссылки по теме:

Передача структуры по ссылке - C++
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как...

Передача по ссылке и изменения - C++
Всем привет. Можно как-то передать массив в функцию не по значению, чтобы он не изменялся, но внутри функции можно было его менять?

Передача параметра по ссылке - C++
Всем доброго времени суток. Понимаю что вопрос покажется очень глупым, но я уже несколько часов бьюсь и не могу решить эту элементарную...

Передача параметров по ссылке - C++
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке? Т.е. вместо void doSomething(const int _count, const...

Передача по ссылке и по значению - C++
Эта тема стара как мир, но я хотел уточнить одну вещь. QBluetoothAddress* address = new QBluetoothAddress("00:1A:7D:DA:71:15"); ...


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

Или воспользуйтесь поиском по форуму:
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
14.10.2013, 18:09  [ТС]     Передача значения переменной по ссылке #15
Цитата Сообщение от Tulosba Посмотреть сообщение
dimakozyr, я сто раз должен что ли попросить код, где инициализация нужной переменной идет?
o_C_DravScene_C_Events - это экземпляр класса C_DravScene. Данный экземпляр создается в строке:
C++
1
C_DrawScene* o_C_DravScene_C_Events;
Экземпляр создается без параметров, т.е. для него вызывается конструктор по умолчанию:
C++
1
C_DrawScene() : currentNumberOfBeaver(0) { generateCurrentNumberOfBeaver(); }
в котором переменной currentNumberOfBeaver присваивается ноль. Вот и вся инициализация.

Можно еще вызвать конструктор с параметрами:
C++
1
C_DrawScene* o_C_DravScene_C_Events(0);
Если речь не об этом, то я не понимаю, о чем тогда
Yandex
Объявления
14.10.2013, 18:09     Передача значения переменной по ссылке
Ответ Создать тему
Опции темы

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