20

我无法解决我遇到的这个问题。这是一个简单的例子:

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 的未定义引用的错误。我究竟做错了什么?谢谢!

4

2 回答 2

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

  2. 您不能以 void 作为参数调用函数。仅在声明中使用。

  3. 如果在类之外,function2 的函数定义将需要 ax:: 限定符,并且第二次不需要 static。


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

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

    void x::function2(void)
    {
    }
于 2010-03-22T00:15:33.837 回答
3

您必须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
}
于 2010-03-22T00:08:29.423 回答