**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我正在写一个头文件,我试图改变主类中的一个变量,但是弹出了一个错误:
“非静态成员必须相对于特定对象”
我并不想创建一个对象,并且变量必须是非静态的,我找到的解决方案包括创建一个对象,或者将其设置为constexpr静态,虽然这样做有效,但它将使其不可修改
发动机h:
class Engine {
public:
playerObject2D mainPlayer;
/* other definitions */
};
main.cpp:
#include "Engine.h"
playerObject2D player;
int main(int argc, char* argv[]){
Engine::init(640, 480, "Test", 0, 0, 0, argc, argv);
player.setPos(320,240); /* set player positon to center of screen */
player.pspd = 8; /* set player speed */
Engine::mainPlayer = player; /* Error */
}
3条答案
按热度按时间vof42yt11#
必须使用其中一种方法来创建类的示例。
您可以直接在堆栈上执行此操作
或者您可以在堆上创建它并通过指针访问它。
yduiuuwa2#
Engine::init
并不初始化全局对象Engine
,它只是类Engine
命名空间中的一个静态(非成员)函数,如果你打算写一个单例,那么你必须通过一个静态函数访问该单例的成员:否则,编写一个常规的C++构造函数,并创建类
Engine
的单个示例,如另一条注解所述:https://stackoverflow.com/a/75683067/160622802guxujil3#
mainPlayer不需要是constexpr,这是程序员根据自己的需求做出的选择。
但是成员变量要么是示例成员,要么是类成员(例如
static
),你不能两者兼得。