определить константу int / char * в .cpp - PullRequest
0 голосов
/ 26 апреля 2018

Мой проект использует 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;

Обратите внимание, что мне нужно использовать его как static . Но он не компилируется, ошибка:

ошибка C2734: «VERSION»: объект «const» должен быть инициализирован, если нет 'Экстерн'

ошибка C2131: выражение не было константой

примечание: сбой был вызван непостоянными аргументами или ссылкой на непостоянный символ

примечание: см. Использование 'VERSION'

Как лучше определить код версии?

Среда: Visual Studio 2015, обновление 3

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я использую нечто подобное.

My version.cpp выглядит так:

const int SoftwareVersion = 0xAA55A55A;

Чтобы использовать номер версии (как, например, в main.cpp), он выглядит следующим образом:

...
extern const int SoftwareVersion;
...
int main(int argc, char **args) {
  printf("Version %i\n",SoftwareVersion);
}
0 голосов
/ 26 апреля 2018

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

...