我正在通过进行小型机器人模拟来学习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
};
Run Code Online (Sandbox Code Playgroud)
然后在构造函数中我初始化机器人和障碍物,如下所示:
numOfRobots = 1; // How many robots to draw
numOfObstacles = 1;
robots = new Robot[numOfRobots];
obstacles = new Obstacle[numOfObstacles];
Run Code Online (Sandbox Code Playgroud)
以下是使用这些变量的静态函数示例:
void Environment::display(void) {
// Draw all robots
for (int i=0; i<numOfRobots; i++) {
robots[i].draw();
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我会收到类似的错误消息
error: invalid use of member ‘Environment::robots’ in static member function
Run Code Online (Sandbox Code Playgroud)
我尝试将numOfRobots,numOfObstacles,机器人和障碍物静态化,但后来我遇到了错误
error: undefined reference to 'Environment::numOfRobots'
Run Code Online (Sandbox Code Playgroud)
我非常感谢有人可以解释我做错了什么.谢谢!
Tor*_*bio 16
静态方法不能使用其类中的非静态变量.
这是因为可以像Environment::display()没有类实例一样调用静态方法,这使得在其中使用的任何非静态变量都是不规则的,也就是说,它们没有父对象.
您应该考虑为什么要尝试使用静态成员来实现此目的.基本上,如何使用静态方法的一个例子是这样的:
class Environment
{
private:
static int maxRobots;
public:
static void setMaxRobots(int max)
{
maxRobots = max;
}
void printMaxRobots();
};
void Environment::printMaxRobots()
{
std::cout << maxRobots;
}
Run Code Online (Sandbox Code Playgroud)
您必须在全局范围内初始化变量,例如:
int Environment::maxRobots = 0;
Run Code Online (Sandbox Code Playgroud)
然后,main例如,你可以使用:
Environment::setMaxRobots(5);
Environment *env = new Environment;
env->printMaxRobots();
delete env;
Run Code Online (Sandbox Code Playgroud)