Подтвердить что ты не робот

Справка по статической функции С++

Я не могу пройти мимо этого вопроса, который у меня есть. Вот простой пример:

class x
{
    public:
    void function(void);

    private:
    static void function2(void);
};

void x::function(void)
{
    x::function2(void);
}

static void function2(void)
{
     //something
}

Я получаю ошибки, в которых жалуются, что функция2 является частной. Если я сделаю это общедоступным (чего я действительно не хочу делать), я получаю ошибки относительно ссылки undefined на функцию2. Что я делаю не так? Спасибо!

4b9b3361

Ответ 1

  • У вас не может быть объявления и определения функции как в классе. Либо переместите определения из класса, либо удалите объявления.

  • Вы не можете вызвать функцию с void как параметр. Это используется только в декларации.

  • Определение функции для функции2, если вне класса будет нуждаться в х:: классификаторе, а статический не требуется во второй раз.


    class x
    {
        public:
            void function(void); 
        private:
            static void function2(void);
    };

    void x::function(void)
    { 
        x::function2(); 
    }

    void x::function2(void)
    {
    }

Ответ 2

Вы должны определить function2 с помощью

static void x::function2 (void)
{
    body
}

как это было при x::function

обновление: Да. вам не нужно указывать метод класса со статикой при его определении.

class x
{
 public:
   void function(void);

 private:
   static void function2(void);
}; //end of class

// here are definitions of members
static void x::function(void)
{
  x::function2();
}
static void x::function2(void)
{
//something
}