У меня есть частный статический константный член в классе, а в реализации класса у меня есть статическая функция, которая пытается использовать эту константу, но дает мне ошибки.

//A.hpp
class A {
    static const int X = 1;     //<

и у меня

//A.cpp
static int DoSomething();
// ....
static int DoSomething {
    int n = A::X;           //<

, и я получаю в этом контексте, когда пытаюсь использовать X из DoSomething и 'const int A :: X' является закрытым в статическая константа int X = 1;.

Как это исправить?

Stabilo

Ответов: 2

Ответы (2)

Вы пытаетесь получить доступ к закрытому члену A из бесплатной функции. Это запрещено.

Вы должны сделать его общедоступным, например:

class A {
public:
  static const int X = 1;
}

Альтернативное решение для ответа Джека - сделать функцию DoSomething () нестатической и объявить ее как друга класса A:

//A.hpp
class A {
    static const int X = 1;
    // ....

    friend int DoSomething();
 };

//A.cpp
int DoSomething() {
    int n = A::X;
      //....
}

2022 WebDevInsider