Static Function Help C++
Asked Answered
A

2

20

I can't get past this issue I am having. Here's a simple example:

class x
{
    public:
    void function(void);

    private:
    static void function2(void);
};

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

static void function2(void)
{
     //something
}

I get errors in which complain about function2 being private. If I make it public (which I don't really want to do) I get errors about an undefined reference to function2. What am I doing wrong? Thank you!

Awl answered 22/3, 2010 at 0:4 Comment(1)
Why is function2 overloaded with exact same signature?Gast
S
36
  1. You can't have a function declaration and definition both in a class. Either move the definitions out of the class or remove the declarations.

  2. You can't call a function with a void as a parameter. That is used only in the declaration.

  3. The function definition for function2 if outside the class will need a x:: qualifier and static is not needed the second time.


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

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

    void x::function2(void)
    {
    }
Sapir answered 22/3, 2010 at 0:15 Comment(1)
It was because I had static the second time. My example was bad, but thank you very much.Awl
H
3

You must define function2 with

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

as it was with x::function

update: Yes. you don't need to mark class method with static when defining it.

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
}
Harding answered 22/3, 2010 at 0:8 Comment(2)
That gives me this error: cannot declare member function to have static linkage. Did I make an error elsewhere?Awl
Under g++-v4.7, it seems you must leave out the keyword "static" when implementing the function.Culvert

© 2022 - 2024 — McMap. All rights reserved.