【发布时间】:2018-04-26 14:25:39
【问题描述】:
我的项目使用version.h来配置应用程序版本,很多源文件都包括这个version.h,目前它定义了应用程序版本,如:
#define VERSION 1
每次升级到新版本,我都需要修改这个VERSION,而且因为它包含在所有的源文件中,所以整个项目都要重新编译,这需要很长时间。
所以我想把它拆分成.h和.cpp。然后我只是在更新时修改.cpp,它只重新编译一个文件。
这是我尝试过的:
test.cpp
#include <iostream>
using namespace std;
const static int VERSION;
// some other source code that uses the version
struct traits {
const static int ver = VERSION;
};
int main() {
cout << traits::ver << endl;
}
version.cpp
const int VERSION = 1;
请注意,我需要将其用作静态。但是编译不出来,报错:
错误 C2734: 'VERSION': 'const' 对象必须初始化,否则 '外部'
错误 C2131:表达式未计算为常量
注意:失败是由非常量参数或引用 非常数符号
注意:查看“版本”的用法
定义版本代码的最佳方式是什么?
环境:Visual Studio 2015 更新 3
【问题讨论】:
-
欺骗是你想要做的。在 C++17 中有inline variables。您应该始终包含错误消息。
-
这个问题显示了编译时间常数大写的习惯是如何产生的,以及为什么这是坏习惯。
-
“请注意,我需要将它用作静态”不,你不需要。
-
您可以将
version设为一个函数,然后自动生成 cpp 文件(在您选择的构建系统中),该函数只返回一个常量。那么当版本发生变化时,header保持不变,只是cpp文件发生变化。