Sign in to follow this  
iwoplaza

Problem with functions!

Recommended Posts

I would like to create buttons. And when you click them, do some functions.
But i have problem with button actions [img]http://public.gamedev.net//public/style_emoticons/default/sad.png[/img].

Some of my code:

[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);
}
[/CODE]

It gives me an error:
[CODE]
invalid use of void expression
[/CODE]

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

Thanks in advance. Edited by iwoplaza

Share this post


Link to post
Share on other sites
[CODE]Button button_file,[/CODE]

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?

Share this post


Link to post
Share on other sites
[quote]
[CODE]
Button button_file,
[/CODE]

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?
[/quote]

"Button button_file," was a copy/paste mistake [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]. 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

Share this post


Link to post
Share on other sites
This is not legal:
[code]
button.func() = func();
[/code]
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
[quote name='iwoplaza' timestamp='1343049974' post='4962236']
Please proceed, and write modified piece of code.
[/quote]

function pointers: [url="http://www.cprogramming.com/tutorial/function-pointers.html"]http://www.cprogramm...n-pointers.html[/url] (C way of doing it, only use this if the other two options are unsuitable for you)
std::function: [url="http://en.cppreference.com/w/cpp/utility/functional/function"]http://en.cppreferen...tional/function[/url] (Use this if your compiler is modern enough)
boost::function: [url="http://www.boost.org/doc/libs/1_50_0/doc/html/function/tutorial.html#id1545628"]http://www.boost.org....html#id1545628[/url] Edited by SimonForsman

Share this post


Link to post
Share on other sites
Thanks to everyone, but i figured it out for myself [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img].

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this