Форум программистов, компьютерный форум 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, и на выходе должно быть 2. Другой пример выглядит следующим образом: при A = 88, это число A мы можем записать в двоичной форме 1011000, младший бит в A есть 1000, и на выходе должно быть 8. ... подробнее

Показать сообщение отдельно
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;
    }
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru