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!

1
  • Why is function2 overloaded with exact same signature? Commented Mar 22, 2010 at 0:10

2 Answers 2

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) { } 
Sign up to request clarification or add additional context in comments.

1 Comment

It was because I had static the second time. My example was bad, but thank you very much.
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 } 

2 Comments

That gives me this error: cannot declare member function to have static linkage. Did I make an error elsewhere?
Under g++-v4.7, it seems you must leave out the keyword "static" when implementing the function.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.