头文件刷新/更新
Header file refresh/update
我在使用头文件时有一些麻烦。我想"刷新"一个。h文件,以便更新其中依赖于外部变量(在主。cc文件中定义)的常量的所有值。大致情况如下:
头文件(Header .h)
extern int extern_value;
const int one = value;
const int two = value * 2;
const int three = value * 3;
主程序
#include "header.h"
int extern_value;
int main(){
extern_value = 10;
// Here is where I would like to refresh the header file.
// Here is where I would like to have my dependant constants
// (one, two and three) being updated.
return 0;
}
请考虑这是问题的极端近似。你们知道怎么解吗?提前谢谢。
编辑:这是我的实际问题:我想有一个头文件,其中包含所有的图形常量,我的项目需要。它们都取决于显示器的大小。主程序做的第一件事是获取有关显示尺寸的信息;然后,我希望程序在头文件中"导出"这些信息,这样它就可以计算相对于显示大小的所有图形常量。
你不能这么做。由于各种原因,但最重要的原因是您的变量是const
,并且您用于计算要分配给它们的值的表达式不会不断地重新求值。
extern int extern_value;
int one() { return extern_value; }
int two() { return extern_value * 2; }
int three() { return extern_value * 3; }
其他笔记:
您可能不应该为此使用
extern
变量。将value
传递给函数:int one(const int value) { return value; } int two(const int value) { return 2 * value; } int three(const int value) { return 3 * value; } int main() { int value = 10; std::cout << one(value) << " " << two(value) << "n"; return 0; }
你不能"刷新"头文件。文件的内容是您键入的内容,当您使用
#include "my_header.h"
时,它包含(实际上是粘贴到)源文件中。您可以更新与非const变量相关的值,但是如果您想用不同的值重复计算表达式,最好的方法是将该表达式转换为上面所示的函数,并使用不同的参数调用函数。- 你可能需要将函数定义从头文件移动到源文件,或者将它们标记为
inline
,否则如果你在多个源文件中使用相同的头文件,你可能会被警告(或收到错误)多个定义。
为了解决您的实际问题,如果您需要通过extern
变量公开信息,您需要使它们非const,并让main()
函数初始化它们,或者在静态初始化期间这样做。这样做时需要注意许多问题,因此提供相应计算几何的函数要安全得多,并将这些计算基于一个或两个函数参数,或静态初始化为安全的少量extern
变量,然后在信息可用时进行适当设置。进一步的细节可以通过搜索例如静态初始化或外部变量来获得。在这种情况下,您可能希望考虑创建一个类来保存您的几何图形并执行相关计算。指向该类实例的指针可以作为extern
变量创建,并在程序初始化时初始化(即静态)。然后,您可以将派生的"常量"作为成员函数提供,该成员函数根据少量封装值计算结果,这些值可以在必要时进行设置/更新。如果你小心的话,你甚至可以让这些都是const
。
请看,例如下面的例子(实时演示):
// ******** HEADER FILE ********
class Geometry {
public:
Geometry(const int rows, const int cols)
: rows_(rows), cols_(cols) {}
int rows() const { return rows_; }
int cols() const { return cols_; }
int pixels() const { return rows_ * cols_; }
// whatever other "constants" you need, defined as functions
// containing expressions based on rows_ and cols_.
private:
// Make copy constructor & assignment operator private to prevent copying
Geometry(const Geometry&);
Geometry& operator=(const Geometry&);
// The data from which everything else is calculated
const int rows_;
const int cols_;
};
extern const Geometry* the_geometry;
// ******** SOURCE FILE ********
#include <iostream>
int main() {
const int rows = 80; // or however you get the number of rows
const int columns = 25; // or however you get the number of columns
the_geometry = new Geometry(rows, columns);
std::cout << the_geometry->pixels() << "n";
return 0;
}
const Geometry* the_geometry = nullptr;
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- 如何在SQLite表更新期间刷新QTableView
- 头文件刷新/更新