Статическая функция Справка C ++ - PullRequest
20 голосов
/ 22 марта 2010

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

class x
{
    public:
    void function(void);

    private:
    static void function2(void);
};

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

static void function2(void)
{
     //something
}

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

Ответы [ 2 ]

36 голосов
/ 22 марта 2010
  1. Вы не можете иметь объявление и определение функции в классе. Либо удалите определения из класса, либо удалите объявления.

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

  3. Определение функции для function2, если вне класса понадобится спецификатор x ::, а static не нужен во второй раз.


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

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

    void x::function2(void)
    {
    }
3 голосов
/ 22 марта 2010

Вы должны определить 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
}
...