Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;管理器数据字段 我试图在C++中创建一个管理器类,或者至少是全局可用数据字段的集合。我只是希望能够获取和设置一些全局数据,而不需要函数。如果可以的话,我也希望避免使用单例_C++ - Fatal编程技术网

C++;管理器数据字段 我试图在C++中创建一个管理器类,或者至少是全局可用数据字段的集合。我只是希望能够获取和设置一些全局数据,而不需要函数。如果可以的话,我也希望避免使用单例

C++;管理器数据字段 我试图在C++中创建一个管理器类,或者至少是全局可用数据字段的集合。我只是希望能够获取和设置一些全局数据,而不需要函数。如果可以的话,我也希望避免使用单例,c++,C++,我尝试了一个静态类: #ifndef MANAGER_H #define MANAGER_H class Manager { public: static float AspectRatio; }; #endif MANAGER_H 但是当我尝试使用“Manager::AspectRatio”时,我会收到LNK2001编译器错误,抱怨未解析的外部 我还尝试了全局字段: #ifndef MANAGER_H #define MANAGER_H float Manager_Aspect

我尝试了一个静态类:

#ifndef MANAGER_H
#define MANAGER_H

class Manager
{
public:
    static float AspectRatio;
};

#endif MANAGER_H
但是当我尝试使用“Manager::AspectRatio”时,我会收到LNK2001编译器错误,抱怨未解析的外部

我还尝试了全局字段:

#ifndef MANAGER_H
#define MANAGER_H

float Manager_AspectRatio = 1.0f;

#endif MANAGER_H
但是,当我在多个文件中包含“manager.h”时,LNK2005编译器错误会抱怨多个定义。我认为使用头部防护的目的是为了防止多重定义


关于如何创建一组全局数据字段,以便在整个程序中访问和修改,您有什么见解吗?

在您的
manager.cpp

float Manager::AspectRatio = 1.0f;

在您的
manager.cpp中

float Manager::AspectRatio = 1.0f;
你已经宣布你的领域很好。您只是没有告诉编译器在哪里存储它们

正如链接器错误所提示的,您必须指定一个存储位置,这意味着它不能在头中

添加一个文件manager.cpp

#include "manager.h"
float Manager::AspectRatio = 1.0f; // for the static class member version
你已经宣布你的领域很好。您只是没有告诉编译器在哪里存储它们

正如链接器错误所提示的,您必须指定一个存储位置,这意味着它不能在头中

添加一个文件manager.cpp

#include "manager.h"
float Manager::AspectRatio = 1.0f; // for the static class member version

我相信,您收到的错误消息是链接器错误,而不是编译器错误。问题是您已将AspectRatio指定为静态浮点。如果决定取消静态说明符,可以执行以下操作:

#ifndef MANAGER_H
#define MANAGER_H 

class Manager
{
public:
    float AspectRatio;
};

int main () {
     Manager m;
     m.AspectRatio = 10;

}

此外,避免使用“y-定义”,因为它不是C++编程方式。

,您所得到的错误消息,我相信,是链接错误而不是编译器错误。问题是您已将AspectRatio指定为静态浮点。如果决定取消静态说明符,可以执行以下操作:

#ifndef MANAGER_H
#define MANAGER_H 

class Manager
{
public:
    float AspectRatio;
};

int main () {
     Manager m;
     m.AspectRatio = 10;

}

此外,避免使用“y-定义”,因为它不是C++编程方式。

静态成员的定义不能在函数内。

class Manager
{
public:
    float AspectRatio;
};

float Manager::AspectRatio = 1.0f;
int main () {
   std::cout << Manager::AspectRation << std::endl;
   return 0;
}
类管理器
{
公众:
浮体;
};
浮动管理器::AspectRatio=1.0f;
int main(){

std::cout静态成员的定义不能在函数中

class Manager
{
public:
    float AspectRatio;
};

float Manager::AspectRatio = 1.0f;
int main () {
   std::cout << Manager::AspectRation << std::endl;
   return 0;
}
类管理器
{
公众:
浮体;
};
浮动管理器::AspectRatio=1.0f;
int main(){

std::cout不幸的是,这不能使“m”全局可访问。我只能在主函数中访问它的实例,这不是我想要的。不幸的是,这不能使“m”全局可访问。我只能在主函数中访问它的实例,这不是我想要的。