在.cpp中定义常量int / char *

时间:2018-04-26 14:25:39

标签: c++ static constants

我的项目使用version.h配置应用版本,许多源文件都包含此version.h,目前它定义的应用版本如下:

#define VERSION 1

每次升级到新版本时,我都需要修改此VERSION,并且由于所有源文件都包含它,整个项目会重新编译,这需要很长时间。< / p>

所以我想把它分成 .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:&#39; VERSION&#39;:&#39; const&#39;如果没有,则必须初始化对象   &#39;的extern&#39;

     

错误C2131:表达式未评估为常量

     

注意:失败是由非常量参数或对a的引用引起的   非常数符号

     

注意:请参阅&#39; VERSION&#39;

的用法

定义版本代码的最佳方法是什么?

环境:Visual Studio 2015更新3

2 个答案:

答案 0 :(得分:4)

<强> version.h中

extern const int VERSION;

<强> version.cpp

#include "version.h"

extern const int VERSION = 1;

<强> TEST.CPP

#include "version.h"

struct traits {
    const static int ver;
};
const int traits::ver = VERSION;

wandbox

答案 1 :(得分:0)

我使用类似的东西。

我的 version.cpp 如下所示:

const int SoftwareVersion = 0xAA55A55A;

要使用版本号(例如main.cpp中的示例),它看起来像:

...
extern const int SoftwareVersion;
...
int main(int argc, char **args) {
  printf("Version %i\n",SoftwareVersion);
}