静态函数帮助C ++

时间:2010-03-22 00:04:23

标签: 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
}

我得到错误,其中抱怨function2是私有的。如果我把它公开(我真的不想这样做),我会得到关于对function2的未定义引用的错误。我究竟做错了什么?谢谢!

2 个答案:

答案 0 :(得分:36)

  1. 您不能在类中拥有函数声明和定义。将定义移出类或删除声明。

  2. 您无法使用void作为参数调用函数。仅在声明中使用。

  3. 如果在类之外需要x :: qualifier并且第二次不需要static,则function2的函数定义。

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

答案 1 :(得分:3)

您必须使用

定义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
}