Есть класс, в котором находится указатель на int-значение. И этот указатель должен быть статическим. Да, странно, но так надо.
В реализации я, как положено, прописываю определение данного члена. Но линковка не идет. Вот минимальный код:
Data.h
#ifndef DATA_H
#define DATA_H
class Data
{
public:
Data(int *initPointerVal); // Класс инитится указателем на int-значение
virtual ~Data();
protected:
static int *pointerVal; // Статически хранимый указатель
};
#endif // DATA_H
Data.cpp
#include "Data.h"
// Определение статического указателя на int-значение
int *pointerVal=nullptr;
Data::Data(int *initPointerVal)
{
pointerVal=initPointerVal; // Запоминается указатель на int-значение
}
Data::~Data()
{
}
main.cpp
#include "Data.h"
int main(int argc, char *argv[])
{
int a=100;
Data data(&a);
return 0;
}
Ошибка такая:
CMakeFiles/sample.dir/Data.cpp.o: In function `Data::Data(int*)':
Data.cpp:(.text+0x21): undefined reference to `Data::pointerVal'
collect2: error: ld returned 1 exit status
Ссылка на архив с примером (нужно cmake): https://ru.files.fm/u/bhassda5#_