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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить суммы положительных элементов для каждого столбца http://www.cyberforum.ru/cpp-beginners/thread1152528.html
Дан двумерный массив размером m*n. Заполнить его с клавиатуры. Определить номера строк, содержащих только положительные элементы. вот нашел на форуме такое вот решение, попробовал сам немного...
C++ Поиск слово с максимальной длиной которое начинается на определенную букву Я нашел код который ищет слова с макс. длиной : // #include "stdafx.h" #include "iostream" #include "string" #include <cstring> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1152522.html
Написать функцию удаления узлов из бинарного дерева C++
#include <iostream> #include <conio.h> using namespace std; const int sz=80; struct file{ char FI; int data; int mes;
Найти произведение положительных элементов одномерного массива C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: - произведение положительных элементов массива; - записать элементы массива в файл.
C++ Цикл не работает http://www.cyberforum.ru/cpp-beginners/thread1152490.html
Вот код // 2.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include "iostream" #include "string" using namespace std; int _tmain(int argc, _TCHAR* argv)
C++ Для заданного положительного целого вывести младший бит Младший бит Для заданного положительного целого A (1 ≤ A ≤ 100), вывести младший бит A. Например, если A = 26, то его мы можем записать в двоичном виде, как 11010, и младший бит A есть 10,... подробнее

Показать сообщение отдельно
rostov888
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 8
21.04.2014, 09:08  [ТС]
Пишу игру в проекте есть 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;
    }
};
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru