C++管理器数据字段
C++ Manager Data Fields
我正在尝试用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_AspectRatio = 1.0f;
#endif MANAGER_H
但当我在多个文件中包含"manager.h"时,我会收到LNK2005编译器错误,抱怨有多个定义。我认为使用标题保护的目的是为了防止多重定义?
关于如何创建一组全局数据字段,以便在整个程序中访问和变异,有什么见解吗?
您已声明您的字段良好。您只是没有告诉编译器将它们存储在哪里。
正如链接器错误所示,您必须指定一个存储位置,这意味着它不能在标头中。
添加文件manager.cpp:
#include "manager.h"
float Manager::AspectRatio = 1.0f; // for the static class member version
在manager.cpp
中
float Manager::AspectRatio = 1.0f;
我相信,您收到的错误消息是链接器错误,而不是编译器错误。问题是您已经将AspectRatio分配为静态浮点。如果您决定取消静态说明符,可以执行以下操作:
#ifndef MANAGER_H
#define MANAGER_H
class Manager
{
public:
float AspectRatio;
};
int main () {
Manager m;
m.AspectRatio = 10;
}
此外,顺便说一句,避免使用#defines,因为它不是C++编程方式。
静态成员的定义不能在函数内部。
class Manager
{
public:
float AspectRatio;
};
float Manager::AspectRatio = 1.0f;
int main () {
std::cout << Manager::AspectRation << std::endl;
return 0;
}
相关文章:
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何使用位字段将数据从二进制文件复制到结构中?
- 如何避免在数据结构中包含存储为字段的类?
- TOS字段从Linux的TCP插座上接收到的数据包获取
- 从数据集 Blob 字段中打开和编辑文件
- 将包含位字段和动态数据的结构复制到 Char 数组缓冲区中
- 如何为我的 Vulkan 类创建此通用数据结构字段
- 在Boost多索引容器中搜索位字段数据
- 如何从 GStreamer 管道读取数据中的特定字段
- 您将使用哪种数据模型在 QML 中制作二维字段 100*100
- C++ 中的 10 位或 12 位字段数据类型
- 使数据输入字段记住其值,从一次运行到下一次运行
- 在不模拟Ctrl+V的情况下将数据粘贴到任何应用程序输入字段中.Windows c++
- C++读取元数据文件,并处理由空白和:混合分隔的字段
- 基于多个字段搜索大型数据集的有效方法
- 为什么 C++ 类需要在类范围之外定义静态字段(数据成员)
- 使用 ADO 将原始文件数据插入访问表的 BLOB("OLE 对象")字段
- 原始数据包创建导致 IP 字段顺序不正确
- 难以读取的armadillo字段数据结构
- 在Visual Studio 2013中使用c++中的对象字段数据创建图表