我有一个名为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;
}
答案 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
。