Итак, у меня есть stati c member precision
и метод publi c stati c для установки его значения в моем классе (код ниже сильно урезан).
class Foo {
private:
typedef unsigned short precision_t;
static precision_t precision;
public:
static void set_precision(precision_t value) {
precision_t precision = value;
/* other stuff */
}
static precision_t get_precision() {
return precision;
}
};
Когда я создаю экземпляр, а затем устанавливаю значение, кажется, что он работает нормально, но попытка получить значение дает небольшую ошибку c: main.cpp:(.text._ZN3Foo13get_precisionEv[_ZN3Foo13get_precisionEv]+0x7): undefined reference to `Foo::precision' collect2: error: ld returned 1 exit status
(запустить на onlinegdb.com).
Точный код в основном:
Foo *foo = new Foo(); //fine
foo->set_precision(5); //no error, but probably wrong given undefined reference
std::cout << Foo::get_precision(); //shows above error
Мой исходный код для set_precision
больше походил на
static void set_precision(precision_t value) {
static bool defined = false;
if (defined) {
precision = value
} else {
precision_t precision = value;
defined = true;
}
/* other stuff */
}
, поэтому он инициализирует precision
только в первый раз.
Я также попытался сделать это для вектора, который хранит указатели на все экземпляры, вместо того, чтобы писать код для инициализации вне класса / в файле .cpp
.
Это даже возможно это сделать, или мне нужно инициализировать (вектор, хранящий указатели экземпляров и беззнаковый короткий, хранящий текущую точность) в файле .cpp
перед функцией main
?