在另一个类c ++中调用成员函数
Posted
技术标签:
【中文标题】在另一个类c ++中调用成员函数【英文标题】:call member function in another class c++ 【发布时间】:2016-08-26 22:46:45 【问题描述】:我有一个名为 Ball 的类和一个 Player 类。在我的 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;
【问题讨论】:
一小时前提出了完全相同的问题。那个是怎么回事? 要调用另一个类中的静态方法,必须在其前面加上类名:Ball::changeCurrentToPrevious();
。
所以我知道,如果我想在 Player 类的方法中调用 Ball 的成员方法,它们必须是静态的。 你为什么这么认为?如果Player
类中有Ball
或Ball*
类型的变量,则可以调用常规方法。
大家感谢您的回答。请注意,我刚刚接触 C++,这是我的第一个项目,我可能会说错话。感谢您的回复,我非常感谢。
【参考方案1】:
如果要调用另一个类的静态方法,需要:
void Player::pass(Player* next)
Ball::changeCurrentToPrevious();
Ball::changeNextToCurrent(next);
要么这样,要么你在 Player 中存储一个指针/引用到球,然后你可以通过它调用。
【讨论】:
感谢您的帮助。一个额外的问题是否同样适用于从类到类的静态变量? 我现在听从了你的建议,我似乎还有另一个问题。我将 Player* current 和 Player* previous 声明为静态变量,但现在在 Ball (Ball.cpp) 的构造函数中,它表示对当前和上一个的未定义引用 看,当你确定你只需要静态的东西时,你只需要其中一个,不管你有多少对象。我不相信这是这种情况。也许你想要一个指针/引用(而不是静态)。 是的,我现在意识到了。只是我是 C++ 新手,所以我不是那么多才多艺【参考方案2】:当然,如果你创建了一个public
方法static
,那么你可以在任何地方用 ClassX::methodY() 调用它,但是随后面向对象就消失了,你实际上是在 @ 中编写代码987654323@,不在C++
。
当然不是,静态方法不能神奇地访问实例的成员变量。
所以,方法不能是静态的;它们必须是非静态(“实例”)方法。
这意味着要调用它们,您必须引用Ball
。这反过来意味着Ball
引用Players
是不够的;每个Player
还必须有对Ball
的引用。
【讨论】:
我认为这将解决问题。我必须改变处理问题的方式。感谢您的回答。以上是关于在另一个类c ++中调用成员函数的主要内容,如果未能解决你的问题,请参考以下文章