2016-01-01 2 views
-3

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

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

и я

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

и я получаю within this context, когда я пытаюсь использовать X из DoSomething и ‘const int A::X’ is private в static const int X = 1;.

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

+0

Пожалуйста, опубликуйте синтаксически действующий код на C++. – juanchopanza

+0

Возможно, вы должны изменить его на public: static const int X = 1; ' – J3soon

+0

Является ли' A.hpp' чем-то важным или это просто ошибка ввода? – J3soon

ответ

2

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

Вы должны сделать это public, например:

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

Но я не хочу, чтобы он был общедоступным ... он используется только внутри класса – Stabilo

+0

Вы пытаетесь получить доступ к нему извне класса, поскольку DoSomething не является частью класса, поэтому ваше требование не выполняется. – Jack

+0

ОК, спасибо! Я сделаю это – Stabilo

1

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

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

    friend int DoSomething(); 
}; 

//A.cpp 
int DoSomething() { 
    int n = A::X; 
     //.... 
} 
Смежные вопросы