静态函数帮助 C++

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的错误。我错在哪里了?谢谢!


为什么函数2会使用完全相同的签名进行重载? - Murali VP
2个回答

36
  1. 在类中不能同时有函数声明和定义。要么将定义移到类外,要么删除声明。

  2. 不能使用void作为参数来调用函数,这只能在声明中使用。

  3. 如果函数2的定义在类外,则需要添加x::限定符,并且第二次不需要使用static。


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

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

    void x::function2(void)
    {
    }

这是因为第二次我使用了静态变量。我的示例不好,但非常感谢你。 - Alex

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
}

2
这给了我这个错误:无法声明成员函数为静态链接。我在其他地方犯了错吗? - Alex
4
在 g++-v4.7 中,似乎在实现函数时必须省略关键字 "static"。 - Joachim W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接