В любом месте в одна единица компиляции (обычно файл .cpp) будет делать:
foo.h
class foo {
static const string s; // Can never be initialized here.
static const char* cs; // Same with C strings.
static const int i = 3; // Integral types can be initialized here (*)...
static const int j; // ... OR in cpp.
};
foo.cpp
#include "foo.h"
const string foo::s = "foo string";
const char* foo::cs = "foo C string";
// No definition for i. (*)
const int foo::j = 4;
(*) В соответствии со стандартами вы должны определить i
вне определения класса (например, j
is), если оно используется в коде, отличном от целочисленных константных выражений. См. Комментарий Дэвида ниже для деталей.