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

Ссылка на переменную другого класса - C++

Восстановить пароль Регистрация
 
rostov888
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
20.04.2014, 20:17     Ссылка на переменную другого класса #1
Всем привет !

Хочу создать ссылку на переменную класса Animation.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PLAYER
{
public:
    ....
        float &CURRENTFrame;
    
    
    PLAYER(Animation &b)
    {   
    &CURRENTFrame=b.currentFrame;
    }
 
       ....
void update()
    {   std::cout <<" CURRENTFrame "<< CURRENTFrame<<"\n"; }
};
****
currentFrame - переменная типа float класса Animation.

Visual C++ пишет следующие :
Код
Error : expression must be a modifiable lvalue
Прошу помощи , как выйти из этой ситуации ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 20:17     Ссылка на переменную другого класса
Посмотрите здесь:

C++ Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
Объявление объекта одного класса в описании другого класса C++
C++ Ошибка компиляции (преобразование объекта класса в объект другого класса)
C++ Инициализация объектов класса в конструкторе другого класса
Как получить private переменную класса, функцей членом другого класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
20.04.2014, 20:20     Ссылка на переменную другого класса #2
Жесть! Убейте меня!

1. Выложите больше кода!
2. Используйте специальны теги для кода программ!
3. *** **** *******
4. ***** ******** ****
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.04.2014, 21:11     Ссылка на переменную другого класса #3
C++
1
2
3
PLAYER(Animation &b):CURRENTFrame(b.currentFrame)
{
}
rostov888
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
21.04.2014, 09:08  [ТС]     Ссылка на переменную другого класса #4
Пишу игру в проекте есть 4 класса class Entity, class PLAYER, class Animation и class AnimationManager.
Переменная cuurentFrame - это номер текущего кадра анимации .
Значение cuurentFrame изменяется в функции void tick() которая находиться в классе Animation.

Идея заключается в том , что бы отслеживать изменения этой переменной в функции void update которая находиться в классе PLAYER .

Для этого нужно создать ссылку на currentFrame и инициализировать эту ссылку в конструкторе класса PLAYER , после чего выводить на экран значения переменной с помощью ссылки в функции void upadte класса PLAYER.
C++
1
2
3
4
5
6
7
8
9
10
11
12
class PLAYER: public Entity
{
public:
    .....
    float &CURRENTFrame;
    
    
    PLAYER(AnimationManager &a,Animation &b, int x,int y):Entity(a,x,y)
    {   
            ...
        &CURRENTFrame=b.currentFrame;
    }
Но компилятор говорит о неправильности этой строчки
&CURRENTFrame=b.currentFrame;
Текст ошибки :
Код
1>main.cpp(75): error C2758: 'PLAYER::CURRENTFrame' : must be initialized in constructor base/member initializer list
1>\main.cpp(71) : see declaration of 'PLAYER::CURRENTFrame'

Как решить эту проблему ?
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
class Animation
{
public:
std::vector<IntRect> frames, frames_flip;
 
float currentFrame, speed;  // вот то самый currentFrame
bool loop, flip, isPlaying; 
Sprite sprite;
    
    
Animation()
{
currentFrame = 0;
isPlaying=true;
flip=false;
}
// функция где проигрывается анимация 
void tick(float time,float &setRo, float &SpeedRot, bool fra,bool &currentBool)
{
 currentFrame += speed * time; // здесь изменяется значение cuurentFrame
                int i = currentFrame;
        sprite.setTextureRect( frames[i] );
        if (flip) sprite.setTextureRect( frames_flip[i] );
}
    
};
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
class Entity
{
public:
    float x,y,dx,dy,w,h;
    float w2,h2;
    AnimationManager anim;
 
    std::vector<Object> obj;
    bool life, dir;
    float timer, timer_end;
    String Name;
    int Health;
 
    Entity(AnimationManager &A,int X, int Y)
    { 
        anim = A;
        x = X;
        y = Y;
        dir = 0;
 
        life=true;
        timer=0;
        timer_end=0;
        dx=dy=0;
    }
 
    virtual void update(float time) = 0;
 
    void draw(RenderWindow &window)
    {.....}
 
    FloatRect getRect()
    {....   }
 
    void option(String NAME, float SPEED=0, int HEALTH=10, String FIRST_ANIM="")
    {...    }
 
};
Вот класс PLAYER
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
41
42
43
44
45
46
47
class PLAYER: public Entity
{
public:
    enum {stay,goRight,goUp,upRight} STATE;
    bool onLadder, shoot, hit,fra,currentBool,animbool;
    std::map<std::string,bool> key;
    Animation anonTest;
    float setRot,SpeedRot;
    float &CURRENTFrame; // Ссылка на переменную currentFrame класса Animation
    
    
    PLAYER(AnimationManager &a,Animation &b, int x,int y):Entity(a,x,y)
    {   
    option("Player",450,450,"goRight");
        STATE=stay; hit=0;
    setRot=SpeedRot=0;
    fra=false;
    currentBool=false;
    animbool=true;
        
                                    &CURRENTFrame=b.currentFrame;
    }
 
    void KeyCheck()
    {
         // Функция которая принимает нажатие клавиш 
    }
 
 
 
    void update(float time)
    {   
        KeyCheck();
    
        if (STATE==stay)    anim.set("stay");
        if (STATE==goUp)    anim.set("goUp");
        if (STATE==goRight) anim.set("goRight");
 
                
        std::cout <<" CURRENTFrame "<< CURRENTFrame<<"\n";
 
        
                anim.tick(time,setRot,SpeedRot,fra,currentBool);
 
        key["R"]=key["L"]=key["Up"]=key["Down"]=key["Space"]=false;
    }
};
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.04.2014, 11:32     Ссылка на переменную другого класса #5
Цитата Сообщение от rostov888 Посмотреть сообщение
Как решить эту проблему ?
Написали уже (3 пост).
Yandex
Объявления
21.04.2014, 11:32     Ссылка на переменную другого класса
Ответ Создать тему
Опции темы

Текущее время: 06:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru