C++ 静态函数帮助C++;

C++ 静态函数帮助C++;,c++,static-functions,C++,Static Functions,我无法克服这个问题。下面是一个简单的例子: class x { public: void function(void); private: static void function2(void); }; void x::function(void) { x::function2(void); } static void function2(void) { //something } 我收到一些错误,抱怨函数2是私有的。如果我将其公开(我真

我无法克服这个问题。下面是一个简单的例子:

class x
{
    public:
    void function(void);

    private:
    static void function2(void);
};

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

static void function2(void)
{
     //something
}

我收到一些错误,抱怨函数2是私有的。如果我将其公开(我真的不想这样做),我会收到关于未定义的对function2的引用的错误。我做错了什么?谢谢大家!

您必须使用

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

更新: 对在定义类方法时,不需要将其标记为static

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
}
  • 类中不能同时有函数声明和定义。将定义移出类或删除声明

  • 不能使用void作为参数调用函数。仅在声明中使用

  • 类外function2的函数定义将需要一个x::限定符,第二次不需要static


  • 为什么function2使用完全相同的签名重载?这给了我一个错误:无法声明成员函数具有静态链接。我在其他地方出错了吗?在g++-v4.7下,似乎在实现函数时必须省略关键字“static”。这是因为我第二次使用static。我的例子不好,但非常感谢。
    
        class x
        {
            public:
                void function(void); 
            private:
                static void function2(void);
        };
    
        void x::function(void)
        { 
            x::function2(); 
        }
    
        void x::function2(void)
        {
        }