LINUX.ORG.RU

Не могу закомпилить класс со статическим указателем

 , ,


0

2

Есть класс, в котором находится указатель на 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#_

★★★★★

Ответ на: комментарий от Xintrea

И да, и нет. Если б оно было пространством имён, то прокатывало бы так:

namespace Data {
int *pointerVal = nullptr;
}

UVV ★★★★★ ()
Ответ на: комментарий от UVV

В любом случае синтаксис доступа к элементам пространства имен через "::" одинаковый.

Xintrea ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.