在另一个类c ++中调用成员函数

时间:2016-08-26 22:46:46

标签: c++

我有一个名为Ball的类和一个类Player.Inside我的Ball类我创建了两个类型为Player的指针,我有两个成员方法所以当我改变球时我可以指向不同的玩家(当前和之前)。所以我知道,如果我想在类Player中的方法中调用Ball的成员方法,它们必须是静态的(我也认为静态方法也可以使用静态变量)但是我似乎有很大的困难,无论我尝试什么我得到了一个不同的错误。

以下是 Player.h

#ifndef PLAYER_H
#define PLAYER_H
#include <iostream>
#include "Player.h"

using namespace std;

class Player
{
    public:
        //constructor of players
        Player(const string &,int,int,int,int); //name,num,x,y,target_line

        //setters and getters
        //player's movements and functions
        void pass(Player*);

    private:
        string Name;
        int Num;
        int X;//0-5
        int Y;//0-9
        int Movement_line;
        int Target_line;

};

#endif // PLAYER_H

下面是 Player.cpp ,其中在方法传递中发生我描述的问题。

#include "Player.h"
#include <stdio.h>
#include <iostream>
#include "Team.h"
#include "Ball.h"
#include <cstdlib>

using namespace std;


Player::Player(const string &name,int num,int x,int y,int target_line)
:   Name(name),
    Num(num),
    X(x),
    Y(y),
    Movement_line(y),
    Target_line(target_line)
{
}

//setters and getters and other member functions

void Player::pass(Player* next){
    changeCurrentToPrevious();
    changeNextToCurrent(next);
}

以下是 Ball.h

#ifndef BALL_H
#define BALL_H
#include "Player.h"

class Ball
{
    public:
        Ball();
        Player* current;
        Player* previous;

        /*void setX_ball(int);
        int getX_ball() const;
        void setY_ball(int);
        int getY_ball() const;
        void assign();*/
        static void changeCurrentToPrevious();
        static void changeNextToCurrent(Player*);


    private:
        int X_ball;
        int Y_ball;
};

#endif // BALL_H

以下是 Ball.cpp

#include "Ball.h"
#include "Team.h"
#include "Player.h"

Ball::Ball()
:   X_ball(2),
    Y_ball(5)
{
    current = NULL;
    previous = NULL;

}

static void Ball::changeCurrentToPrevious(){//when pass occurs
    previous = current ;
}

static void Ball::changeNextToCurrent(Player* next){
    current = next;
}

2 个答案:

答案 0 :(得分:1)

如果要调用另一个类的静态方法,则需要:

void Player::pass(Player* next){
    Ball::changeCurrentToPrevious();
    Ball::changeNextToCurrent(next);
}

要么是,要么你将指针/引用存储在球中,然后你就可以通过它进行调用。

答案 1 :(得分:1)

当然如果你创建一个public方法static,那么你可以从任何地方用ClassX :: methodY()调用它,但是面向对象会从窗口中移出,你实际上是在C中编写代码,而不是在C++中编写代码。

当然不是,静态方法不能神奇地访问实例的成员变量。

因此,方法 不得为静态 ;它们必须是非静态(“实例”)方法。

这意味着要调用它们,您必须引用Ball。这反过来意味着Ball引用Players是不够的;每个Player也必须引用Ball