Допустим, у меня есть два файла foo.h и foo.cppизбежать переопределение для заголовка в исходном файле
foo.h
class foo
{
public:
Foo();
~Foo();
private:
/*
Member functions
*/
static void DoThis();
/*
Member variables
*/
static int x;
protected:
};
foo.cpp
#include "foo.h"
int foo::x;
void foo::DoThis()
{
x++;
}
Могу ли я избежать хлопот, чтобы снова объявить каждую переменную в foo.cpp? Если я удалю эту строку int foo::x;
, я бы получил ошибку компоновщика для неразрешенного внешнего символа.
Есть ли другой способ сделать это, не набирая строку для каждой переменной, которую я планирую использовать?
Вы не декларируете ничего в своем файле реализации (.cpp). Вы определяете вещи там. И нет, определение не является необязательным. (Вы могли бы сделать определение функций встроенным, если хотите.) Кроме того: используйте правильные включенные охранники в файле заголовка для защиты от включения нескольких раз. – Deduplicator
'static int & GetX() {static int x = 0; return x; } 'в заголовке. Помните, что компиляторы работают быстрее, когда в заголовке меньше раздувается. –