views:

174

answers:

2

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!

A: 

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
void x::function(void)
{
  x::function2();
}
void x::function2(void)
{
//something
}
osgx
That gives me this error: cannot declare member function to have static linkage. Did I make an error elsewhere?
Alex
+7  A: 
  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)
    {
    }
Sameer
It was because I had static the second time. My example was bad, but thank you very much.
Alex