Оператор static int num1, num2, counting;
в определении класса не определяет эти переменные, он только объявляет их. Если они используются, они также должны быть определены.
Полный пример этого выглядит следующим образом:
//Begin FibonacciGenerator.hpp
#ifndef FIBONACCI_GENERATOR_HPP
#define FIBONACCI_GENERATOR_HPP
class FibonacciGenerator
{
private:
static int num1, num2, counting;
public:
/* as above */
};
#endif //FIBONACCI_GENERATOR_HPP
//End FibonacciGenerator.hpp
//Begin FibonacciGenerator.cpp
#include "FibonacciGenerator.h"
int FibonacciGenerator::num1;
int FibonacciGenerator::num2;
int FibonacciGenerator::counting;
//End FibonacciGenerator.cpp
Если FibonacciGenerator объявлен в пространстве имен, то эти статические определения членов также должны находиться в этом пространстве имен.
Использование таких статических членов, вероятно, очень плохая идея. Было бы лучше сделать их переменными экземпляра, чтобы вы могли иметь несколько независимых FibonacciGenerators
в отдельных частях кода.