我正在通过制作小型机器人模拟来学习 C++,但在类内的静态成员函数方面遇到了麻烦。
我的环境类定义如下:
class Environment {
private:
int numOfRobots;
int numOfObstacles;
static void display(); // Displays all initialized objects on the screen
public:
Robot *robots;
Obstacle *obstacles;
// constructor
Environment();
static void processKeySpecialUp(int, int, int); // Processes the keyboard events
};
然后在构造函数中我初始化机器人和障碍物,如下所示:
numOfRobots = 1; // How many robots to draw
numOfObstacles = 1;
robots = new Robot[numOfRobots];
obstacles = new Obstacle[numOfObstacles];
以下是使用这些变量的静态函数的示例:
void Environment::display(void) {
// Draw all robots
for (int i=0; i<numOfRobots; i++) {
robots[i].draw();
}
}
当我尝试编译时,我收到如下错误消息
error: invalid use of member ‘Environment::robots’ in static member function
我尝试制作 numOfRobots、numOfObstacles、机器人和障碍物static,但后来我遇到了类似的错误
error: undefined reference to 'Environment::numOfRobots'
我非常感谢有人能解释我做错了什么。
谢谢你!
静态方法不能使用其类中的非静态变量。
那是因为静态方法可以像这样调用Environment::display()
没有类实例,这使得在其内部使用的任何非静态变量都是不规则的,也就是说,它们没有父对象。
您应该考虑为什么要尝试使用静态成员来实现此目的。基本上,如何使用静态方法的一个示例如下:
class Environment
{
private:
static int maxRobots;
public:
static void setMaxRobots(int max)
{
maxRobots = max;
}
void printMaxRobots();
};
void Environment::printMaxRobots()
{
std::cout << maxRobots;
}
并且您必须在全局范围内初始化变量,例如:
int Environment::maxRobots = 0;
然后,里面main
例如,您可以使用:
Environment::setMaxRobots(5);
Environment *env = new Environment;
env->printMaxRobots();
delete env;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)