Jump to content

  • Log In with Google      Sign In   
  • Create Account


Problem with functions!


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
10 replies to this topic

#1 iwoplaza   Members   -  Reputation: 156

Like
0Likes
Like

Posted 23 July 2012 - 06:54 AM

I would like to create buttons. And when you click them, do some functions.
But i have problem with button actions Posted Image.

Some of my code:

//---- Header File----
class Button{
	public:
		//variables initiating like float x,y,z...
		void func(void);
		void draw(){
			//Some drawing
		}
		void CheckButtonClick(float mx, float my,int key,int state){
			if(mx >= x && mx <= x+w &&
			   my >= y && my <= y+h &&
			   state == 0 && key == 0){
				  click = true;
				  func();
			}else
				  click = false;
		}
};

//----Main File----

void AddButton(Button &button,string text,void func(),float x,float y,float z,float w,float h,float s,float r,float g,float b,GLuint tex,GLuint clicktex){
	 button.tex = tex;
	 button.clicktex = clicktex;
	 button.func() = func();
	 button.textsize = s;
	 button.text = text;
	 button.x = x;
	 button.y = y;
	 button.z = z;
	 button.w = w;
	 button.h = h;
	 button.color[0] = r;
	 button.color[1] = g;
	 button.color[2] = b;
}


Button button_file,

void close(){
	 exit(0);
}


void InitRendering(){

	_buttondark = loadTexture ("Data/IvoGui/buttondark.tga");
	_buttondark_click = loadTexture ("Data/IvoGui/buttondark_click.tga");

	AddButton(button_help,"Pomoc",close(),133,5,0.001f,64,16,0.9f,1.0f,1.0f,1.0f,_buttondark,_buttondark_click);
}

It gives me an error:
invalid use of void expression

Without button actions everything works fine.
Can you help me with this actions?

Thanks in advance.

Edited by iwoplaza, 23 July 2012 - 06:55 AM.


Sponsor:

#2 Bacterius   Crossbones+   -  Reputation: 8188

Like
0Likes
Like

Posted 23 July 2012 - 07:06 AM

Button button_file,

I think you mistyped a semicolon here, but I'm pretty sure it's a copy/paste mistake. This is followed by a "void", which explains the error message (C++ compiler errors generally make no sense if you made a typo, so you have to look through to try and find it), but I doubt this is the source of the error, could you post the revised code if this is so?

The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#3 iwoplaza   Members   -  Reputation: 156

Like
0Likes
Like

Posted 23 July 2012 - 07:11 AM

Button button_file,

I think you mistyped a semicolon here, but I'm pretty sure it's a copy/paste mistake. This is followed by a "void", which explains the error message (C++ compiler errors generally make no sense if you made a typo, so you have to look through to try and find it), but I doubt this is the source of the error, could you post the revised code if this is so?


"Button button_file," was a copy/paste mistake Posted Image. But if you want i can give you code that is needed (some of header file, some of main that is about button), or a full code for a further investigation.

Edited by iwoplaza, 23 July 2012 - 07:15 AM.


#4 rip-off   Moderators   -  Reputation: 7706

Like
1Likes
Like

Posted 23 July 2012 - 07:15 AM

This is not legal:
button.func() = func();
You cannot assign to a function. In your current code, you would have to create a concrete implementation of Button::func.

If you have a newish compiler you can handle this using std::function. If you are using an older compiler and cannot upgrade, boost::function is an option. You could also fall back to function pointers for simple functions, and a pure virtual interface class for more complex scenarios.

#5 iwoplaza   Members   -  Reputation: 156

Like
0Likes
Like

Posted 23 July 2012 - 07:17 AM

What you mean by concrete implementation of Button::func.

#6 rip-off   Moderators   -  Reputation: 7706

Like
2Likes
Like

Posted 23 July 2012 - 07:22 AM

You have declared a function. C++ requires this function to have a single definition.

You appear to want to design a callback system, where you can given different Buttons different functions to call when they are clicked. C++ doesn't have "first class" support for this at the language level, but it can be simulated using the approaches I've outlined.

#7 iwoplaza   Members   -  Reputation: 156

Like
-4Likes
Like

Posted 23 July 2012 - 07:26 AM

Please proceed, and write modified piece of code.

#8 rip-off   Moderators   -  Reputation: 7706

Like
2Likes
Like

Posted 23 July 2012 - 07:28 AM

I gave you lots of starting points. What have you tried?

#9 SimonForsman   Crossbones+   -  Reputation: 5806

Like
2Likes
Like

Posted 23 July 2012 - 07:31 AM

Please proceed, and write modified piece of code.


function pointers: http://www.cprogramm...n-pointers.html (C way of doing it, only use this if the other two options are unsuitable for you)
std::function: http://en.cppreferen...tional/function (Use this if your compiler is modern enough)
boost::function: http://www.boost.org....html#id1545628

Edited by SimonForsman, 23 July 2012 - 07:33 AM.

I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

#10 iwoplaza   Members   -  Reputation: 156

Like
-2Likes
Like

Posted 23 July 2012 - 09:09 AM

Thanks to everyone, but i figured it out for myself Posted Image.

#11 rip-off   Moderators   -  Reputation: 7706

Like
2Likes
Like

Posted 23 July 2012 - 10:33 AM

Great. Another aspect of community etiquette is to post the solution. This way, people who search the forums later on know what worked for you.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS